2016-07-17 10 views
6

द्वारा लौटाए गए ऑब्जेक्ट में संपत्ति जोड़ें, मैं क्लाइंट को वापस जाने से पहले एक अनुक्रम उदाहरण में एक संपत्ति जोड़ने की कोशिश कर रहा हूं।Sequelize FindOne

router.get('/cats/1', function (req, res) { 
    Cat.findOne({where: {id: 1}}) 
     .then(function (cat) { 
      // cat exists and looks like {id: 1} 
      cat.name = "Lincoln"; 
      // console.log of cat is {id: 1, name: Lincoln} 
      res.json(cat); 
     }); 
}); 

ग्राहक केवल के {id: 1} और नहीं नए जोड़े कुंजी देखें।

  • यहां क्या हो रहा है?
  • Sequelize द्वारा किस प्रकार का ऑब्जेक्ट लौटाया जाता है?
  • मैं अपनी बिल्लियों में नई संपत्ति कैसे जोड़ सकता हूं और उन्हें वापस भेज सकता हूं?
+0

लौटाया गया वस्तु एक सादा वस्तु नहीं है, बल्कि एक मोडल उदाहरण है। [डेटा पुनर्प्राप्ति/खोजक] पर एक नज़र डालें (http://docs.sequelizejs.com/en/latest/docs/models-usage/) – DavidDomain

+0

मैं अपने डीबी में कोई भी नया उदाहरण सहेजना नहीं चाहता हूं। बस 'res'json (cat) 'चाहते हैं कि मैं' cat' instance में जोड़े गए किसी भी नए गुण को शामिल करूं। – Rastalamm

उत्तर

7

Sequelize Model वर्ग (जिनमें से अपने बिल्लियों उदाहरण हैं) एक toJSON() तरीका है जिसके res.json शायद अपने बिल्लियों serialise के लिए प्रयोग करेंगे है। विधि Model#get() (https://github.com/sequelize/sequelize/blob/95adb78a03c16ebdc1e62e80983d1d6a204eed80/lib/model.js#L3610-L3613) का परिणाम देती है, जो केवल मॉडल पर परिभाषित विशेषताओं का उपयोग करती है। ,

sequelize.define('Cat', { 
    // [other columns here...] 
    name: Sequelize.VIRTUAL 
}); 

वैकल्पिक रूप से, अगर आप प्रॉपर्टी जोड़ने के लिए नहीं करना चाहते हैं: आप बिल्लियों नाम सेट करने के लिए, लेकिन डीबी में नामों की दुकान नहीं सक्षम होना चाहते हैं, तो आप जब अपनी बिल्ली मॉडल को परिभाषित करने के लिए एक आभासी स्तंभ का उपयोग कर सकते मॉडल परिभाषा के लिए:

cat = cat.toJSON(); // actually returns a plain object, not a JSON string 
cat.name = 'Macavity'; 
res.json(cat); 
+0

हालांकि यह काम कर सकता है, ऐसा लगता है कि यह सबसे अच्छा तरीका नहीं है .. मैं इसे एक नई कुंजी निर्दिष्ट करके ऑब्जेक्ट को संशोधित करने की कोशिश कर रहा हूं, और मूल कुंजी/मूल्य जोड़े के साथ संशोधित ऑब्जेक्ट को पास कर रहा हूं + नई कुंजी/क्लाइंट को मूल्य जोड़ी (डीबी इंस्टेंस के बजाए)। – Rastalamm

+0

मैं उत्सुक हूं - डीबी पुनर्प्राप्ति के बाद संपत्ति जोड़ने के लिए आपका उपयोग केस क्या है? यदि आप वर्चुअल प्रॉपर्टी जोड़ना चाहते हैं तो गलत जगह पर काम कर रहा है क्योंकि यह डीबी के बहुत करीब है, तो मैं आपको सीक्वेलिज़ इंस्टेंसों को अपने डेटा ऑब्जेक्ट्स को मॉडलिंग करने का एक आसान तरीका समझने के लिए प्रोत्साहित करता हूं जो कि बस से आबादी प्राप्त करने के लिए होता है डेटाबेस। अपने लक्ष्य को प्राप्त करने के बारे में सोचने का एकमात्र अन्य तरीका यह है कि पहले 'cat.toJSON() '(जो वास्तव में एक ऑब्जेक्ट देता है, एक जेसन स्ट्रिंग नहीं) को कॉल करता है और उस पर अपनी कस्टम प्रॉपर्टी सेट करता है। –

+0

मुझे लगता है कि 'cat.toJSON()' का आपका सुझाव मेरे लिए सही है। उपयोग का मामला निम्नलिखित है .. मैं कुछ डीबी जानकारी लेता हूं, आउटपुट पर कुछ गणितीय कार्यों को चलाता हूं, फिर क्लाइंट को मूल संख्याओं के साथ-साथ कुछ नए गुणों को भी गणितीय कार्यों से आउटपुट से संबंधित करता हूं। – Rastalamm

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