2013-07-22 7 views
12

के साथ ट्रांज़ेक्शनल एसक्यूएल तो मैं अब के साथ नोडजेएस/एक्सप्रेस के साथ खेल रहा हूं और मैं वास्तव में एक पूर्ण जावास्क्रिप्ट स्टैक का उपयोग करके अपेक्षाकृत बड़ी तरफ प्रोजेक्ट को फिर से लिखना चाहता हूं कि यह कैसे काम करेगा। वेब sockets के समर्थन के साथ एक REST एपीआई के लिए एक NodeJS बैकएंड के लिए Sails.js एक बहुत अच्छा विकल्प प्रतीत होता है जो कि मैं वही हूं जो मैं ढूंढ रहा हूं, हालांकि मैं एक और मुद्दा हल कर रहा हूं और यह नोडजेएस के भीतर लेनदेन एसक्यूएल है।Sails.js

चीजों के नोडजेएस पक्ष पर मैंने देखा है कि अधिकांश डेटा परत/ओएमएस MySQL से निपटने के दौरान लेनदेन का समर्थन नहीं करते हैं। Sails.js (वाटरलाइन) के साथ प्रदान किया गया ओआरएम भी लेन-देन का समर्थन नहीं करता है जो अजीब है क्योंकि मैंने उन स्थानों को देखा है जहां इसका उल्लेख किया गया है, हालांकि ये टिप्पणियां काफी पुरानी हैं। Knex.js के लेनदेन के लिए समर्थन है इसलिए मैं सोच रहा था कि ओआरएम को प्रतिस्थापित करना आसान है या नहीं, (या यदि Sails.js कोर फ्रेमवर्क में वॉटरलाइन मानते हैं)।

मैं यह भी सोच रहा था कि क्या बुकशेल्फ़ के अलावा Knex.js के शीर्ष पर एक ओआरएम बनाया गया है क्योंकि मैं बैकबोन मॉडल/संग्रह प्रणाली का प्रशंसक नहीं हूं?

+0

जिज्ञासु आप इसके बारे में पसंद नहीं है क्या आपको लगता है मॉडल/संग्रह प्रणाली में सुधार किया जा सकता है या क्या। – tgriesser

उत्तर

6

हम ORM स्तर पर लेन-देन के लिए देशी समर्थन पर काम कर रहे: https://github.com/balderdashy/waterline/issues/62

संघों की संभावना पहले आ जाएगा, लेकिन लेनदेन बगल में हैं। हम सिर्फ ग्रुप द्वारा और एकत्रित (योग, औसत, आदि)

+1

क्या इस की स्थिति है ... मैं सिर्फ कई मेज पर एकल अनुकूलक लेनदेन में दिलचस्पी रखता हूँ ... मैं प्रलेखन कह जलरेखा लेनदेन लेकिन उस वक्तव्य पर कोई विस्तार है, यह देखने .. या यह कैसे उपयोग करने के लिए के प्रलेखन। – jonasfj

+0

आप वास्तव में समूह कैसे करते हैं? दोनों वॉटरलाइन दस्तावेज और सेल दस्तावेज पर Ctrl + f शून्य परिणाम दिखाता है। एक त्वरित उदाहरण भयानक होगा। – Kory

17

समाप्त हो तुम अब भी एसक्यूएल प्रश्नों सीधे Model.query() का उपयोग कर लिख सकते हैं। चूंकि यह एक असीमित कार्य है, इसलिए आपको इसे पुन: व्यवस्थित करने के लिए वादे या async का उपयोग करना होगा। उदाहरण के लिए, MySQL एडाप्टर, async का उपयोग कर, और एक मॉडल User कहा जाता है:

SailsJS में
async.auto({ 
    transaction: function(next){ 
    User.query('BEGIN', next); 
    }, 
    user: ['transaction', function(next) { 
    User.findOne(req.param('id')).exec(next); 
    }], 
    // other queries in the transaction 
    // ... 
}, function(err, results) { 
    if (err) { 
    User.query('ROLLBACK', next); 
    return next(err); 
    } 
    User.query('COMMIT', next); 
    // final tasks 
    res.json(results.serialize); 
}); 
+0

कनेक्शन पूलिंग सक्षम होने पर यह काम नहीं कर सकता है। आपको अलग कनेक्शन पर BEGIN, रोलबैक और COMMIT नहीं चलाया जाना चाहिए। –

+0

यह एकाधिक समवर्ती कॉल के लिए काम नहीं करेगा –

1

लेनदेन निकला प्रत्याशित की तुलना में काफी जटिल काम किया जाना है। लक्ष्य ओआरएम एडाप्टर को यह बताना है कि मॉडल पर दो बहुत ही अलग नियंत्रक क्रियाएं एक ही MySQL कनेक्शन के माध्यम से भेजी जानी चाहिए।

ऐसा करने का प्राकृतिक तरीका दो नए एडाप्टर लिखते हैं जो यह इंगित करने के लिए एक अतिरिक्त जानकारी स्वीकार करता है कि एक क्वेरी एक लेनदेन कॉल से संबंधित है। ऐसा करने के लिए waterline (सेल ओआरएम अबास्ट्रक्शन मॉड्यूल) में बदलाव की आवश्यकता है।

चेकआउट अगर यह मदद करता है - https://www.npmjs.com/package/sails-mysql-transactions

संबंधित मुद्दे