2015-10-11 6 views
5

मैं हैपीजेएस के लिए काफी नया हूं। मैं एक सेवा का निर्माण कर रहा हूं जहां मेरे पास दो मार्ग/मार्ग 1 हैं और/रूट 2 प्लगइन आर्किटेक्चर का उपयोग कर रहे हैं। मैंने अपनी मेनिफेस्ट फ़ाइल पर दोनों प्लगइन के रूप में पंजीकृत किया है।किसी अन्य मार्ग से एक हैपी मार्ग पर कॉल करें

मैं/रूट 2 से/रूट 1 को कॉल करना चाहता हूं, इसलिए/रूट 2/मार्ग 1 से पेलोड उत्तर पर निर्भर करता है। मैं प्री-हैंडलर पर/रूट 2/रूट 1 पर तर्क डालने की सोच रहा हूं लेकिन मैं उन्हें अलग से रखना चाहता हूं।

किसी अन्य चीज़ से पंजीकृत प्लगइन को कॉल करने का तरीका नहीं पता है कि दोनों प्लगइन्स (मार्ग) नेटवर्क अनुरोध कर रहे हैं। पढ़ने के लिए धन्यवाद।

धन्यवाद।

उत्तर

8

आपके द्वारा निर्दिष्ट के रूप में है कि आप एक साझा हैंडलर का उपयोग नहीं करना चाहते हैं/मार्ग शर्त (जो मेरी पहली पसंद होगा), आप एक वास्तविक अनुरोध एक http ग्राहक (Wreck, request, http या की तरह) का उपयोग कर सकता है ।

एक और अधिक कुशल तरीका है कि वास्तव में शामिल नहीं करता है, नेटवर्क अनुरोध बनाने का उपयोग है HAPI के अंतर्निहित server.inject()Shot द्वारा प्रदान की विधि। यह आपके सर्वर में एक अनुरोध इंजेक्ट करेगा और प्रतिक्रिया प्राप्त करेगा, जिसका आप उपयोग कर सकते हैं। यहां एक उदाहरण दिया गया है:

var Hapi = require('hapi'); 

var server = new Hapi.Server(); 
server.connection({ port: 4000 }); 

var plugin1 = function (server, options, next) { 

    server.route({ 
     method: 'GET', 
     path: '/route1', 
     handler: function (request, reply) { 

      reply('Hello'); 
     } 
    }); 

    next(); 
}; 

plugin1.attributes = { name: 'plugin1' }; 

var plugin2 = function (server, options, next) { 

    server.route({ 
     method: 'GET', 
     path: '/route2', 
     handler: function (request, reply) { 

      server.inject('/route1', function (res) { 

       reply(res.payload + ' World!'); 
      }); 
     } 
    }); 

    next(); 
}; 

plugin2.attributes = { name: 'plugin2' }; 

server.register([plugin1, plugin2], function (err) { 

    if (err) throw err; 
    server.start(function (err) { 
     if (err) throw err; 
     console.log('Started'); 
    }); 
}); 

ध्यान दें कि मार्ग यहां प्लगइन में हैं, यह तथ्य अप्रासंगिक है। मैंने इसे केवल इसमें शामिल किया है, इसलिए यह आपकी स्थिति के करीब है।

शॉट और server.inject() मुख्य रूप से परीक्षण के लिए उपयोग किया जाता है लेकिन इस तरह के वैध रनटाइम उपयोग भी होते हैं।

आप /route2 के लिए एक अनुरोध करते हैं, तो इस /route1 हैंडलर आह्वान और पेलोड मिल जाएगा: अगर है कि

$ curl localhost:4000/route2 
Hello World! 
+0

ध्यान दें कि यह आगे नहीं हेडर, स्थिति-कोड और संभावित त्रुटियों करता है कि आप क्या एक बार देख ले चाहते हैं https://github.com/hapijs/discuss/issues/297#issuecomment-255593684 पर – FGRibreau

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