2013-08-29 11 views
19

में स्वयं को HTTP अनुरोध करें, मैं एक एनपीएम मॉड्यूल का निर्माण कर रहा हूं जिसके लिए HTTP अनुरोध (चल रहे वेब सर्वर) की आवश्यकता है। उदाहरण के लिए:नोडजेएस/एक्सप्रेसजेएस

var url = "http://127.0.0.1:" + (process.env.PORT || 3000) + path; 
request(url, function(error, response, body){ 
    ... 
}); 

क्या वास्तव में HTTP अनुरोध किए बिना नोडजेएस पाइपलाइन के माध्यम से अनुरोध संसाधित करने का कोई तरीका है?

या यूआरएल बनाने का कोई बेहतर तरीका है? मैं घबरा गया हूं कि 127.0.0.1 उत्पादन साइटों के लिए इसे संभालने का सबसे मजबूत तरीका नहीं है।

+0

आप एक्सप्रेस उदाहरण है? यदि हां, मुझे विश्वास है कि आप बस 'अनुरोध' ईवेंट को ट्रिगर कर सकते हैं। – gustavohenke

+0

@gustavohenke हाँ, मुझे पहुंच की आवश्यकता हो सकती है - क्या आप एक साधारण उदाहरण डाल सकते हैं? – bendytree

+0

एक भेजने के बिना अनुरोधों का परीक्षण करना संभव नहीं है। माइकल से नोड का http.request या अनुरोध लाइब्रेरी अनुरोध भेजने के लिए पर्याप्त है। इस प्रकार आपको सर्वर पर परीक्षण चलाना चाहिए। यह भी सर्वर पर चलता है इसलिए '127.0.0.1' ठीक काम करना चाहिए। – user568109

उत्तर

0

मैं इसे अपने प्रोजेक्ट में से एक में करता हूं और यह ठीक काम करता है। मैं अब तक बिना किसी समस्या के देव और प्रोड में इसका उपयोग करता हूं, क्योंकि मैं कई अलग-अलग वेब सेवाओं के साथ कई नोडजेज़ अनुप्रयोगों का उपयोग करता हूं जो स्वयं को लॉग इन करने या अउटेंटिकेशन की जांच करने के लिए कहते हैं। मैं दोनों express.js और sails.js (express.js के आधार पर)

0

मैं का उपयोग कर लगता है कि अनुरोध मॉड्यूल स्वीकार्य है का उपयोग करें, यह काफी तेज है और मैं इस दृष्टिकोण का उपयोग जब मैं इकाई परीक्षण

1

आप रख सकते हैं करना आपके मॉडल या नियंत्रक के अंदर वह विधि और ऐप के अंदर इसे कॉल करें यदि आपके पास सिर्फ एक नोडज एप्लिकेशन है, तो इसे नया अनुरोध बनाने के बजाय कम संसाधनों की आवश्यकता है।

यदि आपके पास एक से अधिक नोडजेस ऐप्स (या अन्य सेवाएं) हैं, तो विशिष्ट URL और पोर्ट के साथ अन्य वेब सेवाओं के लिए अनुरोध करना सामान्य है।

6

स्व उपभोक्ता JSON एपीआई

एक आत्म लेने वाली JSON एपीआई, आप कुछ स्टैंडअलोन नियंत्रक कार्यों में कुछ कार्यक्षमता को परिभाषित करने और फिर इस तथ्य के बाद व्यक्त करने के लिए कार्यक्षमता तार। एक उदाहरण के रूप में एक पुस्तकालय आवेदन का उपयोग करते हैं:

books.js

module.exports = { 
    browse: function() { 
     return Book.findAll() 
    }, 
    read: function (options) { 
     return Book.findById(options.book) 
    }, 
    processLateFees: function() { 
     // Do a bunch of things to process late fees 
    } 
} 

करने वाली http.js

इस फाइल को हम एक समारोह है कि एक HTTP रूट करने के लिए एक नियंत्रक समारोह धर्मान्तरित निर्माण में। हम क्वेरी पैरामीटर लेने के लिए और विकल्प के रूप में हमारे नियंत्रक है कि पारित:

module.exports = function toHTTP (func) { 
    return function (req, res) { 
     func(req.params).then(function (data) { 
      res.send(data) 
     }) 
    } 
} 

router.js

और फिर हम हमारे http रूटर

var express = require('express') 
var books = require('./books') 
var toHTTP = require('./to-http') 

var app = express() 
app.get('/books', toHTTP(books.browse)) 
app.get('/books/:book', toHTTP(books.read)) 
app.get('/batch-jobs/process-late-fees', toHTTP(books.processLateFees)) 

तो अब हम करने के लिए हमारे नियंत्रक कनेक्ट नियंत्रक कार्यक्षमता से जुड़ा एक एक्सप्रेस अनुप्रयोग। और अद्भुत बात यह है कि हम इन नियंत्रक कार्यों को मैन्युअल रूप से भी कॉल कर सकते हैं।

var books = require('./books') 
books.processLateFees().then(function() { 
    // late fees have been processed 
}) 

आप इस की गहराई उदाहरण में एक और अधिक की जरूरत है, Ghost blog codebase वर्तमान में इस पैटर्न आसपास बनाया गया है। यह एक बहुत ही जानकारीपूर्ण पढ़ा है।

0

यो आप एक्सिस का उपयोग कर सकते हैं, जो ब्राउज़र और node.js. के लिए एक वादा आधारित HTTP क्लाइंट है। यह HTTP अनुरोध बाहरी या आंतरिक गीले अनुरोध करता है, इस मामले में आंतरिक मेजबान के रूप में localhost पर भेज देगा।

axios.get('http://localhost:port/end_point_name/some_route') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });