Sequelize.js tarafından oluşturulan SQL'i nasıl görebilirim?


99

PostgreSQL sunucusuna gönderilen SQL komutlarını görmek istiyorum çünkü doğru olup olmadıklarını kontrol etmem gerekiyor. Özellikle tablo oluşturma komutlarıyla ilgileniyorum.

Örneğin, ActiveRecord (Ruby) SQL ifadelerini standart çıktıya yazdırır. Bu, Node.js / ActionHero.js ve Sequelize.js ile de mümkün mü?

Yanıtlar:


158

Sıralamayı başlatırken, bir işlev veya console.log olabilen bir günlük kaydı seçeneği iletebilirsiniz.

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

Yalnızca tablo oluşturma sorgularını görüntülemek istiyorsanız .sync'e bir günlük kaydı seçeneği de iletebilirsiniz.

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

Teşekkürler, tam olarak istediğim bu. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- Ne anlama geliyor?
ideaboxer

Doğru yerine bir işlevi geçmeniz gerektiği anlamına gelir.
Mick Hansen

5
Ben asla hiç geçti true.
ideaboxer

1
Partiye biraz geç kaldım ama console.logesrarengiz yollarla çalışıyor. Kullanarak günlük mesaj kaçınmak gerekir { logging: (msg) => console.log(msg) }veya { logging: function(msg) { console.log(msg) } }. (test
edilmedi,

1
Oluşturulan sorguyu görebilmemin herhangi bir yolu var mı, ancak sorgu çalışmamalı mı?
NIKHIL CM

37

Günlükte belirtildiği gibi Error: Please note that find* was refactored and uses only one options object from now on.. Son ardışık sürüm (4) için sonucu yalnızca bir komut için almak istiyorsanız:

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


1
bu aynı zamanda yerel sorgularla da çalışır:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
bu, günlüğe kaydetme yeri için doğru cevaptır: console.log, 4. sıraya yerleştirilmelidir.
user627119

30

Bir komut için devam dizisine bakmak isterseniz, onu dinleyebilir ve sql yazdırmak için bir işlev ekleyebilirsiniz.

Bu örneğe bakın:

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

38
Artık tek bir ifadeyi günlüğe kaydetme seçeneği olarak bir günlük kaydediciye User.find(1, { logging: console.log })
Stephen Watkins

4
Benimki sadece diyor <functionName>.findOne(...).on is not a function sequelize 3.30.4 Kullanılması
Ginna

1
Bazı ilişkilendirme karışımlarının günlük kaydı seçeneğini desteklemediği görülüyor. Özellikle, get*bir OwnTo ilişkisinin kaynağında.
Tom

3

Ayrıca, ortamınızı ayarlayarak, böylece: DEBUG=sequelize:sql* uygulamanızı başlatmadan önce , Sequelize'nin Hata Ayıklama modülünü kullanımından yararlanabilirsiniz .


1
bu bir cevap olmalı! Bahşiş için teşekkürler!
confiq
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.