Làm cách nào để xem SQL được tạo bởi Sequelize.js?


98

Tôi muốn xem các lệnh SQL được gửi đến máy chủ PostgreSQL vì tôi cần kiểm tra xem chúng có đúng không. Đặc biệt, tôi quan tâm đến các lệnh tạo bảng.

Ví dụ, ActiveRecord (Ruby) in các câu lệnh SQL của nó ra đầu ra tiêu chuẩn. Điều này có khả thi với Node.js / ActionHero.js và Sequelize.js không?

Câu trả lời:


154

Bạn có thể chuyển tùy chọn ghi nhật ký khi khởi tạo phần tiếp theo, có thể là một hàm hoặc console.log

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

Bạn cũng có thể chuyển tùy chọn ghi nhật ký sang .sync nếu bạn chỉ muốn xem các truy vấn tạo bảng

sequelize.sync({ logging: console.log })

Cảm ơn, đây chính xác là những gì tôi muốn. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- Điều đó có nghĩa là gì?
ideaboxer

Có nghĩa là bạn nên chuyển một hàm thay vì true.
Mick Hansen,

5
Tôi chưa bao giờ vượt qua true.
ideaboxer

1
Tôi đến bữa tiệc hơi muộn, nhưng console.loglàm việc theo những cách bí ẩn. Bạn sẽ có thể tránh thông báo nhật ký bằng cách sử dụng { logging: (msg) => console.log(msg) }hoặc { logging: function(msg) { console.log(msg) } }. (chưa được kiểm tra vì vậy tôi có thể là hoàn toàn sai)
3ocene

1
Có cách nào để tôi có thể xem truy vấn đã tạo nhưng truy vấn không được thực thi không?
NIKHIL CM

37

Như đã nêu trong nhật ký Error: Please note that find* was refactored and uses only one options object from now on.. Đối với phiên bản kích thước tiếp theo mới nhất (4) nếu bạn chỉ muốn có kết quả cho một lệnh:

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


1
điều này cũng hoạt động với các truy vấn bản địa:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
đây là câu trả lời chính xác cho vị trí nên đặt logging: console.log, trong phần tiếp theo 4.
user627119

30

Nếu bạn muốn xem kích thước phần tiếp theo của một lệnh, bạn có thể nghe nó và đính kèm một hàm để in sql.

Kiểm tra ví dụ này:

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

38
Bây giờ bạn chuyển vào trình ghi nhật ký như một tùy chọn để ghi lại một câu lệnh duy nhất:User.find(1, { logging: console.log })
Stephen Watkins

4
Mine chỉ nói <functionName>.findOne(...).on is not a function dùng sequelize 3.30.4
ginna

1
Có vẻ như một số kết hợp liên kết không hỗ trợ tùy chọn ghi nhật ký. Cụ thể, get*trên nguồn của mối quan hệ Thuộc về.
Tom

1

Bạn cũng có thể tận dụng lợi thế của việc sử dụng mô-đun Gỡ lỗi của Sequelize, bằng cách thiết lập môi trường của bạn, do đó: DEBUG=sequelize:sql* trước khi khởi động ứng dụng của bạn.


1
đây phải là một câu trả lời! Cảm ơn vì tiền hỗ trợ!
confiq
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.