2014-05-07 5 views
7

मैं सेल के लिए नया हूं और मैं प्रत्येक एपीआई प्रतिक्रिया के लिए मानक ऑब्जेक्ट लौटने के लिए सबसे अच्छी/उचित विधि का पता लगाने की कोशिश कर रहा हूं।मैं प्रत्येक एपीआई प्रतिक्रिया को SailsJS में मानक उत्तर ऑब्जेक्ट में कैसे लपेट सकता हूं?

कंटेनर हमारे सामने के अंत की आवश्यकता है:

find : function(req, res){ 

    var id = req.param('id'); 

    Foo.findOne({ id : id }).exec(function(err, aFoo){ 

     res.json(
     AppSvc.jsonReply(
      req, 
      [], 
      aFoo 
     ), 200 
    ); 
    }); 

    } 
:

{ 
    "success": true/false, 
    "session": true/false, 
    "errors": [], 
    "payload": [] 
} 

वर्तमान में, मैं इस उदाहरण की तरह प्रत्येक नियंत्रक में खाका क्रिया (सिर्फ इसलिए बहुत, बहुत गलत लगता है) को अधिलेखित कर रहा हूँ

और में AppSvc.js:

jsonReply : function(req, errors, data){ 

    return { 
     success : (errors && errors.length ? false : true), 
     session : (req.session.authenticated === true), 
     errors : (errors && errors.length ? errors : []), 
     payload : (data ? data : []) 
    }; 

    } 

साथ ही, मैं आधुनिकीकरण के लिए मिला है ify प्रत्येक res.json() प्रत्येक डिफ़ॉल्ट प्रतिक्रिया के लिए विधि (badRequest, notFound, आदि)। फिर, यह बहुत गलत लगता है।

तो, मैं एक मानक कंटेनर में सभी एपीआई प्रतिक्रियाओं को सही ढंग से कैसे फनल कर सकता हूं?

उत्तर

6

सेल कस्टम प्रतिक्रियाएं इसके लिए बहुत अच्छी हैं।

आप खाका कोड को देखें, तो आपको लगता है कि हर एक res.ok इसके पूर्ण होने पर कॉल देखेंगे: - ok.js - https://github.com/balderdashy/sails/blob/master/lib/hooks/blueprints/actions/find.js#L63

आप अपनी खुद की फ़ाइल में जोड़ सकते हैं एपीआई/प्रतिक्रियाओं के लिए/- जो हैंडलर में निर्मित डिफ़ॉल्ट को ओवरराइड करेगा।

https://github.com/balderdashy/sails/blob/master/lib/hooks/responses/defaults/ok.js < - बस इसे कॉपी करने और पेस्ट करने के लिए पेस्ट करें और आपको आवश्यकता के अनुसार अनुकूलित करें।

+0

आप 'एपीआई/ब्लूप्रिंट/find.js' फ़ाइल का उपयोग करके वैश्विक ब्लूप्रिंट 'ढूंढ' विधि को ओवरराइड भी कर सकते हैं! – sgress454

+1

यह सही था। मैं अपने 'AppSvc.jsonReply' कंटेनर का उपयोग करने के लिए सभी api/प्रतिक्रियाओं/* फ़ाइलों में 'res.json()' कॉल को ओवरराइट करता हूं। मेरे नियंत्रकों के भीतर मैं अब सामान्य 'res.ok (डेटा) कर सकता हूं; ',' res.notFound(); ', आदि धन्यवाद रोब! – NotJustClarkKent

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

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