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?

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

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


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

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.


1
to powinna być odpowiedź! Dzięki za wskazówkę!
confiq
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.