Node.js 防止Sequelize在执行查询时将SQL输出到控制台?
我有一个函数来检索用户的配置文件Node.js 防止Sequelize在执行查询时将SQL输出到控制台?,node.js,sequelize.js,Node.js,Sequelize.js,我有一个函数来检索用户的配置文件 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(
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);
});
});
调用“find”函数时,它会在启动服务器的控制台上显示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
传递给日志记录
参数:
var sequelize = new Sequelize('database', 'username', 'password', {
// disable logging; default: console.log
logging: false
});
有关更多选项,请检查。如果使用了'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": {
...
}
与其他答案一样,您可以只设置
日志记录:false
,但我认为,与完全禁用日志记录相比,您可以在应用程序中使用日志记录级别。有时,您可能希望查看已执行的查询,因此最好将Sequelize配置为详细或调试级别的日志。例如(我在这里使用winston作为日志框架,但您可以使用任何其他框架):
仅当winston log level设置为debug或更低的调试级别时,才会输出SQL语句。如果日志级别为warn或info,例如SQL将不会被记录基于此讨论,我构建了此
config.json
,可以完美地工作:
{
"development": {
"username": "root",
"password": null,
"logging" : false,
"database": "posts_db_dev",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}
}
我使用的是Sequelize ORM 6.0.0,我使用的是“日志记录”:与其他版本一样错误,但我发布了最新版本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因素方法。所有这些答案在创建时都会关闭日志记录
但是,如果我们需要关闭运行时的日志记录,该怎么办
所谓运行时,我的意思是在使用newsequelize(..
函数初始化sequelize
对象之后
我浏览了一下,找到了一种在运行时关闭日志记录的方法
// Somewhere your code, turn off the logging
sequelize.options.logging = false
// Somewhere your code, turn on the logging
sequelize.options.logging = true
我使用下面的代码解决了很多问题。 问题是:
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'
}
}
并且,在环境变量中,将DB\u QUERY\u LEVEL
设置为[“QUERY”,“error”]
结果:因此,只有当查询有错误时才会记录,否则不会记录
参考链接:
希望这有帮助!
谢谢。新的续集({
主机:“本地主机”,
数据库:“数据库名称”,
方言:“mysql”,
用户名:“root”,
密码:“密码”,
日志记录:false//用于禁用日志
})
我有一个问题,假设我不希望在findOrCreate()中返回密码字段方法。我该怎么做?@SunilSharma排除属性,在此页面上搜索exclude
。你最好开始一个新问题,而不是尝试将一个新问题背在一个几乎不相关的问题上。谢谢,这是可行的,但它为执行的每个查询提供了一个空白。你能帮我吗..现在,日志记录
选项应该是。这在使用sequelize v4时似乎没有效果。有人找到解决方案吗?人们仍然使用MAMP?是的,为了开发,如果您有其他最佳免费选项,请让我知道,谢谢
const sequelize = new Sequelize("test", "root", "root", {
host: "127.0.0.1",
dialect: "mysql",
port: "8889",
connectionLimit: 10,
socketPath: "/Applications/MAMP/tmp/mysql/mysql.sock",
// It will disable logging
logging: false
});
{
'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'
}
}