Запобігти Sequelize від виведення SQL на консоль при виконанні запиту?


188

У мене є функція отримання профілю користувача.

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;

Чи є спосіб, щоб це не відображалося? Якийсь прапор, який я десь встановив у конфігураційному файлі?


У мене є питання, припустимо, я не хочу, щоб поле повернулося паролем у методі findOrCreate (). Як я можу це зробити?
Sunil Sharma

@SunilSharma виключає атрибут, шукайте excludeна цій сторінці sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Karel Frajták

Відповіді:


358

Створюючи об’єкт Sequelize, перейдіть falseдо loggingпараметра:

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

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

});

Щоб отримати додаткові варіанти, перегляньте документи .


23
вам краще почати нове запитання, ніж намагатися підправити нове запитання на ледь спорідненому.
thenetimp

Дякую, це працює, проте дає пробіл для кожного виконаного запиту. Ви можете мені допомогти ..
Тіхо Том,

1
На даний момент loggingопція повинна бути функцією .
Лі Хань К'єол

1
Схоже, це не має ефекту при використанні sequelize v4. Хтось знайшов резолюцію?
Гарбіт

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": {
    ...
   }

26

Як і в інших відповідях, ви можете просто встановити 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'
     }
}

І в змінній оточення встановіть DB_QUERY_LEVELяк ["запит", "помилка"].

Результат: У результаті він запишеться лише тоді, коли запит має помилку, інакше він не буде.

Посилання для посилання: введіть dc запит реєстрації записів doc

Сподіваюся, це допомагає! Дякую.


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
});

люди все ще використовують MAMP?
thenetimp

Так, для розвитку, якщо у вас є ще один найкращий безкоштовний варіант, будь ласка, повідомте мене, дякую
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.