사용자의 프로필을 검색하는 기능이 있습니다.
app.get('/api/user/profile', function (request, response)
{
// Create the default error container
var error = new Error();
var User = db.User;
User.find({
where: { emailAddress: request.user.username}
}).then(function(user)
{
if(!user)
{
error.status = 500; error.message = "ERROR_INVALID_USER"; error.code = 301;
return next(error);
}
// Build the profile from the user object
profile = {
"firstName": user.firstName,
"lastName": user.lastName,
"emailAddress": user.emailAddress
}
response.status(200).send(profile);
});
});
“찾기”기능이 호출되면 서버가 시작된 콘솔에 select 문이 표시됩니다.
Executing (default): SELECT `id`, `firstName`, `lastName`, `emailAddress`, `password`, `passwordRecoveryToken`, `passwordRecoveryTokenExpire`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`emailAddress` = 'johndoe@doe.com' LIMIT 1;
이것을 표시하지 않는 방법이 있습니까? 구성 파일에서 어딘가에 설정 한 플래그?
답변
Sequelize 객체를 만들 때 매개 변수로 전달 false
하십시오 logging
.
var sequelize = new Sequelize('database', 'username', 'password', {
// disable logging; default: console.log
logging: false
});
더 많은 옵션을 보려면 docs를 확인하십시오 .
답변
‘config / config.json’파일이 사용되는 경우이 경우 개발 구성 섹션에서 config.json에 ‘logging’: false를 추가하십시오.
// file config/config.json
{
{
"development": {
"username": "username",
"password": "password",
"database": "db_name",
"host": "127.0.0.1",
"dialect": "mysql",
"logging": false
},
"test": {
...
}
답변
다른 답변과 마찬가지로을 설정할 수 logging:false
는 있지만 로깅을 완전히 비활성화하는 것보다 낫다고 생각하면 앱에서 로그 수준을 포용 할 수 있습니다. 때로는 실행 된 쿼리를 살펴보고 상세 레벨 또는 디버그 레벨로 로그하도록 Sequelize를 구성하는 것이 좋습니다. 예를 들어 (여기서는 winston을 로깅 프레임 워크로 사용하고 있지만 다른 프레임 워크를 사용할 수 있습니다) :
var sequelize = new Sequelize('database', 'username', 'password', {
logging: winston.debug
});
winston 로그 레벨이 디버그 레벨 또는 디버그 레벨로 설정된 경우에만 SQL 문을 출력합니다. 로그 레벨이 경고되거나 SQL과 같은 정보가 기록되지 않는 경우
답변
이러한 모든 답변은 생성시 로깅 기능 이 해제되어 있습니다 .
그러나 런타임에 로깅 을 해제해야하는 경우 어떻게해야 합니까?
런타임에 함수를 sequelize
사용 하여 객체를 초기화 한 후 의미 new Sequelize(..
합니다.
나는 github 소스를 들여다 보았고 런타임에서 로깅을 끄는 방법을 찾았습니다.
// Somewhere your code, turn off the logging
sequelize.options.logging = false
// Somewhere your code, turn on the logging
sequelize.options.logging = true
답변
이 토론을 바탕으로 config.json
완벽하게 작동하는 것을 만들었습니다 .
{
"development": {
"username": "root",
"password": null,
"logging" : false,
"database": "posts_db_dev",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}
}
답변
내 대답은 다음과 같습니다.
요약 : typeorm
ORM 라이브러리 로 사용 하고 있었습니다 . 따라서 쿼리 로깅 수준을 설정하기 위해 로깅 옵션을로 직접 설정하는 대신 다음 옵션을 사용했습니다 false
.
솔루션 : 파일 이름-ormconfig.ts
{
'type': process.env.DB_DRIVER,
'host': process.env.DB_HOST,
'port': process.env.DB_PORT,
'username': process.env.DB_USER,
'password': process.env.DB_PASS,
'database': process.env.DB_NAME,
'migrations': [process.env.MIGRATIONS_ENTITIES],
'synchronize': false,
'logging': process.env.DB_QUERY_LEVEL,
'entities': [
process.env.ORM_ENTITIES
],
'cli': {
'migrationsDir': 'migrations'
}
}
그리고 envrionment 변수에서 DB_QUERY_LEVEL
[ “query”, “error”]로 설정하십시오.
결과 : 결과적으로 쿼리에 오류가있는 경우에만 기록되고 그렇지 않으면 기록되지 않습니다.
참조 링크 : typeorm db query logging doc
도움이 되었기를 바랍니다! 감사.
답변
Sequelize ORM 6.0.0을 사용하고 있으며 “logging”: 나머지는 false이지만 최신 버전의 ORM에 대한 답변을 게시했습니다.
const sequelize = new Sequelize(
process.env.databaseName,
process.env.databaseUser,
process.env.password,
{
host: process.env.databaseHost,
dialect: process.env.dialect,
"logging": false,
define: {
// Table names won't be pluralized.
freezeTableName: true,
// All tables won't have "createdAt" and "updatedAt" Auto fields.
timestamps: false
}
}
);
참고 : 비밀을 .env
12 요소 방법론을 준수 하는 구성 파일에 저장하고 있습니다 .