Як я бачу SQL, згенерований Sequelize.js?


98

Я хочу побачити команди SQL, які надсилаються на сервер PostgreSQL, тому що мені потрібно перевірити, чи вони правильні. Зокрема, мене цікавлять команди створення таблиць.

Наприклад, ActiveRecord (Ruby) друкує свої оператори SQL на стандартний висновок. Чи можливо це також за допомогою Node.js / ActionHero.js та Sequelize.js?

Відповіді:


154

Ви можете передавати параметр реєстрації при ініціалізації 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-- що це означає?
ідеалбоксер

Значить, вам слід передавати функцію замість істинної.
Мік Хансен

5
Я ніколи не проходив true.
ідеалбоксер

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

1
це правильна відповідь, де слід розміщувати журнал: console.log, щоб бути послідовно 4.
user627119

30

Якщо ви хочете подивитися на секелізацію для однієї команди, ви можете прослухати її та приєднати функцію до друку sql.

Ознайомтеся з цим прикладом:

User.find(1).on('sql', console.log).then(function(user) {
  // do whatever you want with the user here

38
Тепер ви передаєте реєстратор як варіант для реєстрації однієї заяви:User.find(1, { logging: console.log })
Стівен Уоткінс

4
Міне просто каже, <functionName>.findOne(...).on is not a function використовуючи sequelize 3.30.4
ginna

1
Здається, що деякі суміші об'єднань не підтримують параметр реєстрації. Зокрема, get*джерело відносини відноситься до.
Том

2

Ви також можете скористатися використанням Sequelize модуля налагодження, встановивши своє оточення, таким чином: DEBUG=sequelize:sql* перед запуском програми.


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