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

189

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

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;

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

thenetimp
источник
У меня есть вопрос, предположим, я не хочу, чтобы поле пароля возвращалось в методе findOrCreate (). Как я могу это сделать ?
Сунил Шарма
@SunilSharma исключить атрибут, поиск excludeпо этой странице sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Карел Фрайтак

Ответы:

360

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

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

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

});

Для получения дополнительной информации, проверьте документы .

victorkohl
источник
23
Вам лучше начать новый вопрос, чем пытаться совмещать новый вопрос с едва связанным.
thenetimp
Спасибо, это работает, но оно дает пробел для каждого выполненного запроса. Можете ли вы помочь мне ..
Тиджо Том
1
На данный момент loggingопция должна быть функцией .
Ли Хань Кеол
1
Это, кажется, не имеет эффекта при использовании sequelize v4. Кто-нибудь нашел разрешение?
Garbit
37

Если используется файл «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": {
    ...
   }
Супават Пусаванно
источник
27

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

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

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

Мостафа Абделлатееф
источник
6

Все эти ответы отключены во время создания журнала .

Но что, если нам нужно отключить ведение журнала во время выполнения?

Под временем выполнения я имею в виду после инициализации 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 
Ратул Шаркер
источник
2

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

{
  "development": {
    "username": "root",
    "password": null,
    "logging" : false,
    "database": "posts_db_dev",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false 
  }
}
Стивен Халм
источник
2

Вот мой ответ:

Вкратце : я использовал 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_LEVELas ["query", "error"].

Результат: в результате он будет регистрироваться только тогда, когда в запросе будет ошибка, иначе не будет.

Ссылка ссылки: typeorm db для ведения журнала запросов

Надеюсь это поможет! Спасибо.

Викаш Кумар Чоудхары
источник
0

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

УЛИЧНЫЕ ДЕНЬГИ
источник
0

Я решил много вопросов, используя следующий код. Проблемы были: -

  1. Не соединяется с базой данных
  2. Проблемы с подключением к базе данных
  3. Избавление от логов в консоли (специально для этого).
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
});
ROOT
источник
люди все еще используют MAMP?
thenetimp
Да, для разработки, если у вас есть еще один лучший бесплатный вариант, пожалуйста, дайте мне знать, спасибо