मैं Sequelize.js द्वारा उत्पन्न SQL को कैसे देख सकता हूं?


99

मैं SQL कमांड्स को देखना चाहता हूं जो PostgreSQL सर्वर पर भेजे जाते हैं क्योंकि मुझे यह जांचने की आवश्यकता है कि क्या वे सही हैं। विशेष रूप से, मुझे टेबल निर्माण कमांड में दिलचस्पी है।

उदाहरण के लिए, ActiveRecord (Ruby) अपने SQL स्टेटमेंट को मानक आउटपुट पर प्रिंट करता है। क्या यह Node.js / ActionHero.js और Sequelize.js के साथ भी संभव है?

जवाबों:


158

आप सीरीज़ को इनिशियलाइज़ करते समय एक लॉगिंग ऑप्शन पास कर सकते हैं, जो या तो फंक्शन या कंसोल हो सकता है

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) } }। (
अछूता

1
क्या कोई तरीका है जिससे मैं उत्पन्न क्वेरी देख सकता हूं, लेकिन क्वेरी निष्पादित नहीं होनी चाहिए?
NIKHIL CM

37

जैसा कि लॉग में बताया गया है Error: Please note that find* was refactored and uses only one options object from now on.। यदि आप केवल एक कमांड के लिए परिणाम चाहते हैं, तो नवीनतम सीक्वल संस्करण (4) के लिए:

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


1
यह देशी प्रश्नों के साथ भी काम करता है:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
क्रिश्चियन नोएल

1
लॉगिंग के लिए यह सही उत्तर है: कंसोल। प्लॉट को अगली कड़ी में रखा जाना चाहिए।
user627119

30

यदि आप एक आदेश के लिए अगली कड़ी को देखना चाहते हैं, तो आप इसे सुन सकते हैं और प्रिंटल को एक फ़ंक्शन संलग्न कर सकते हैं।

इस उदाहरण को देखें:

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*एक रिश्ता संबंध के स्रोत पर।
टॉम

3

आप अपने पर्यावरण को सेट करके, डिबग मॉड्यूल के सीक्वेलाइज के उपयोग का लाभ भी उठा सकते हैं, इस प्रकार: DEBUG=sequelize:sql* अपना ऐप शुरू करने से पहले।


1
यह एक उत्तर होना चाहिए! पारितोषिक के लिए धन्यवाद!
विश्वास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.