Как мне увидеть SQL, созданный Sequelize.js?

99

Я хочу видеть команды SQL, которые отправляются на сервер PostgreSQL, потому что мне нужно проверить, верны ли они. В частности, меня интересуют команды создания таблиц.

Например, ActiveRecord (Ruby) выводит свои операторы SQL на стандартный вывод. Возможно ли это с Node.js / ActionHero.js и Sequelize.js?

идеолог
источник

Ответы:

158

Вы можете передать параметр ведения журнала при инициализации sequelize, который может быть функцией или console.log

var sequelize = new Sequelize('database', 'username', 'password', {
    logging: console.log
    logging: function (str) {
        // do your own logging
    }
});

Вы также можете передать параметр ведения журнала в .sync, если хотите только просматривать запросы создания таблицы.

sequelize.sync({ logging: console.log })
Ян Аагаард Мейер
источник
Спасибо, это именно то, что я хочу. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- что это значит?
ideaboxer
Означает, что вы должны передать функцию вместо true.
Мик Хансен
5
Я никогда не проходил true.
ideaboxer
1
Я немного опаздываю на вечеринку, но console.logработает загадочным образом. Вы должны иметь возможность избежать появления сообщения журнала с помощью { logging: (msg) => console.log(msg) }или { logging: function(msg) { console.log(msg) } }. (непроверено, поэтому я могу быть полностью неправ)
3ocene
1
Могу ли я увидеть сгенерированный запрос, но запрос не должен выполняться?
NIKHIL CM
37

Как указано в журнале Error: Please note that find* was refactored and uses only one options object from now on.. Для последней версии sequelize (4), если вы хотите получить результат только для одной команды:

User.findAll({where: {...}, logging: console.log})

Адлен Афане
источник
1
это также работает с собственными запросами:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Кристиан Ноэль
1
это правильный ответ для того, где следует разместить logging: console.log, в продолжении 4.
user627119 01
30

Если вы хотите посмотреть на продолжение одной команды, вы можете прослушать ее и прикрепить функцию к распечатке sql.

Посмотрите этот пример:

User.find(1).on('sql', console.log).then(function(user) {
  // do whatever you want with the user here
vpontis
источник
38
Теперь вы передаете регистратор в качестве опции для записи одного оператора:User.find(1, { logging: console.log })
Стивен Уоткинс,
4
Моя просто говорит: <functionName>.findOne(...).on is not a function Использование продолжения 3.30.4
Джинна
1
Похоже, что некоторые из примесей ассоциации не поддерживают возможность ведения журнала. В частности, в get*источнике отношения принадлежитTo.
Том
4

Вы также можете воспользоваться преимуществом использования Sequelize модуля Debug, установив свою среду, например: DEBUG=sequelize:sql* перед запуском приложения.

Steev
источник
1
это должен быть ответ! Спасибо за чаевые!
confiq