Предотвратить Sequelize из вывода SQL в консоль при выполнении запроса?

У меня есть функция для получения профиля пользователя.

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` = '[email protected]' LIMIT 1;

Есть ли способ, чтобы это не отображалось? Какой-то флаг, который я где-то задал в файле конфигурации?

Ответ 1

Когда вы создаете объект Sequelize, передайте false в параметр logging:

var sequelize = new Sequelize('database', 'username', 'password', {

  // disable logging; default: console.log
  logging: false

});

Дополнительные параметры: docs.

Ответ 2

Если используется файл 'config/config.json', тогда добавьте 'logging': false в config.json в этом случае в разделе конфигурации разработки.

  // file config/config.json
  {
      {
      "development": {
        "username": "username",
        "password": "password",
        "database": "db_name",
        "host": "127.0.0.1",
        "dialect": "mysql",
        "logging": false
      },
      "test": {
    ...
   }

Ответ 3

Как и в других ответах, вы можете просто установить logging:false, но я думаю, что лучше, чем полностью отключить ведение журнала, вы можете просто охватить уровни журналов в своем приложении. Иногда вы можете взглянуть на выполненные запросы, поэтому лучше настроить Sequelize для регистрации на уровне verbose или debug. например (я использую winston здесь как структуру ведения журнала, но вы можете использовать любую другую инфраструктуру):

var sequelize = new Sequelize('database', 'username', 'password', {
  logging: winston.debug
});

Это приведет к выводам операторов SQL только в том случае, если уровень журнала Winston установлен на отладку или понижение уровней отладки. Если уровень журнала является предупреждением или информацией, например, SQL не будет регистрироваться

Ответ 4

Основываясь на этом обсуждении, я построил этот config.json, который отлично работает:

{
  "development": {
    "username": "root",
    "password": null,
    "logging" : false,
    "database": "posts_db_dev",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false 
  }
}

Ответ 5

Я использую 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-факторную методологию.