Jak mogę zobaczyć kod SQL wygenerowany przez Sequelize.js?

98

Chcę zobaczyć polecenia SQL, które są wysyłane do serwera PostgreSQL, ponieważ muszę sprawdzić, czy są poprawne. W szczególności interesują mnie polecenia tworzenia tabel.

Na przykład ActiveRecord (Ruby) wypisuje swoje instrukcje SQL na standardowe wyjście. Czy jest to możliwe również w przypadku Node.js / ActionHero.js i Sequelize.js?

ideaboxer
źródło

Odpowiedzi:

154

Podczas inicjalizacji sequelize można przekazać opcję rejestrowania, która może być funkcją lub console.log

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

Możesz także przekazać opcję rejestrowania do .sync, jeśli chcesz tylko wyświetlać zapytania dotyczące tworzenia tabeli

sequelize.sync({ logging: console.log })
Jan Aagaard Meier
źródło
Dzięki, właśnie tego chcę. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- co to znaczy?
ideaboxer
Oznacza, że ​​zamiast true należy przekazać funkcję.
Mick Hansen
5
Nigdy nie zdałem true.
ideaboxer
1
Trochę spóźniłem się na imprezę, ale console.logdziała w tajemniczy sposób. Powinieneś być w stanie uniknąć komunikatu dziennika za pomocą { logging: (msg) => console.log(msg) }lub { logging: function(msg) { console.log(msg) } }. (niesprawdzone, więc mogę się całkowicie mylić)
3ocen
1
Czy istnieje sposób, aby zobaczyć wygenerowane zapytanie, ale zapytanie nie powinno być wykonywane?
NIKHIL CM
37

Jak podano w dzienniku Error: Please note that find* was refactored and uses only one options object from now on.. Dla najnowszej wersji sequelize (4), jeśli chcesz mieć wynik tylko dla jednego polecenia:

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

Adlen Afane
źródło
1
działa to również w przypadku zapytań natywnych:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel
1
to jest prawidłowa odpowiedź na to, gdzie logować się należy: console.log, w sequelize 4.
user627119
30

Jeśli chcesz spojrzeć na sequelize dla jednego polecenia, możesz go posłuchać i dołączyć funkcję do wydruku sql.

Sprawdź ten przykład:

User.find(1).on('sql', console.log).then(function(user) {
  // do whatever you want with the user here
vpontis
źródło
38
Teraz przekazujesz rejestrator jako opcję logowania pojedynczego oświadczenia:User.find(1, { logging: console.log })
Stephen Watkins
4
Mój właśnie mówi <functionName>.findOne(...).on is not a function Using sequelize 3.30.4
ginna
1
Wygląda na to, że niektóre mieszanki asocjacyjne nie obsługują opcji rejestrowania. W szczególności get*w źródle relacji shouldTo.
Tom
3

Możesz także skorzystać z zastosowania modułu Debug w Sequelize, ustawiając swoje środowisko, a więc: DEBUG=sequelize:sql* przed uruchomieniem aplikacji.

steev
źródło
1
to powinna być odpowiedź! Dzięki za wskazówkę!
confiq