दिलचस्प पोस्ट
'सेट इन्टर्न' बनाम 'सेटटाइमआउट' क्या हैं और वे उपयोगी क्यों हैं? HTML इनपुट में कैरेट स्थिति प्राप्त करें? एक अलग विधि में परिभाषित आंतरिक श्रेणी के अंदर एक गैर-अंतिम चर को संदर्भित नहीं किया जा सकता क्यों जीसीसी के साथ x 86 पर पूर्णांक बह निकला एक अनंत लूप पैदा करता है? अजगर जैसे पायथन तत्व-वार ट्यूपल परिचालन Regex String.matches में काम नहीं करता () जब जीएचसी हास्केल में मेमोआइज़ेशन स्वचालित है? pinvokestackimbalance – मैं इसे कैसे ठीक कर सकता हूं या इसे बंद कर सकता / सकती हूं? कैसे सेट किया गया () कार्यान्वित? Java GUI में JTextArea के ऑटो-स्क्रोलिंग को कैसे सेट करें? द्विपदीय फाइलों के साथ एक गिट संघर्ष का समाधान करना .keyup () हैंडलर को देरी कैसे करें जब तक कि उपयोगकर्ता टाइपिंग बंद नहीं कर सकता? स्मार्ट पृष्ठांकन एल्गोरिथ्म मैं कैसे देख सकता हूं कि मेरी प्रतिक्रियाशील एक्सटेंशन क्वेरी क्या कर रही है?

Node.js एक्सप्रेस में HTTP अनुरोध प्राप्त करें

मैं नोड / एक्सप्रेस के अंदर से HTTP अनुरोध कैसे कर सकता / सकती हूं? मुझे किसी अन्य सेवा से कनेक्ट करना होगा मुझे उम्मीद है कि कॉल एसिंक है और कॉलबैक में रिमोट सर्वर प्रतिक्रिया शामिल है।

वेब के समाधान से एकत्रित समाधान "Node.js एक्सप्रेस में HTTP अनुरोध प्राप्त करें"

यहाँ मेरा एक नमूना से कोड है यह async है और एक JSON ऑब्जेक्ट देता है यह कोई भी अनुरोध प्राप्त कर सकता है नोट वहाँ अधिक इष्टतम तरीके (सिर्फ एक नमूना) है – उदाहरण के लिए, आप एक सरणी में रखे हुए विखंडन को जोड़ने और इसमें शामिल होने के बजाय … उम्मीद है, यह आपको सही दिशा में शुरू किया गया था:

var http = require("http"); var https = require("https"); /** * getJSON: REST get request returning JSON object(s) * @param options: http options object * @param callback: callback to pass the results JSON object(s) back */ exports.getJSON = function(options, onResult) { console.log("rest::getJSON"); var port = options.port == 443 ? https : http; var req = port.request(options, function(res) { var output = ''; console.log(options.host + ':' + res.statusCode); res.setEncoding('utf8'); res.on('data', function (chunk) { output += chunk; }); res.on('end', function() { var obj = JSON.parse(output); onResult(res.statusCode, obj); }); }); req.on('error', function(err) { //res.send('error: ' + err.message); }); req.end(); }; 

इसे एक ऑब्जेक्ट ऑब्जेक्ट बनाकर कहा जाता है जैसे:

 var options = { host: 'somesite.com', port: 443, path: '/some/path', method: 'GET', headers: { 'Content-Type': 'application/json' } }; 

और एक कॉलबैक फ़ंक्शन प्रदान करना।

उदाहरण के लिए, किसी सेवा में, मुझे ऊपर बाकी मॉड्यूल की आवश्यकता होती है और फिर ऐसा करते हैं।

 rest.getJSON(options, function(statusCode, result) { // I could work with the result html/json here. I could also just return it console.log("onResult: (" + statusCode + ")" + JSON.stringify(result)); res.statusCode = statusCode; res.send(result); }); 

अद्यतन करें:

यदि आप एसिंक की प्रतीक्षा कर रहे हैं (रैखिक नहीं कॉलबैक), वादे, समय समर्थन और इंटेलीसेंस को संकलित करते हैं, तो हम एक हल्के एचटीएच और बाकी ग्राहक बनाते हैं जो बिल को फिट करते हैं:

माइक्रोसॉफ्ट टाइप-थ्रू-क्लाइंट

सरल http.get(options, callback) फ़ंक्शन node.js में उपयोग करने का प्रयास http.get(options, callback) :

 var http = require('http'); var options = { host: 'www.google.com', path: '/index.html' }; var req = http.get(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); // Buffer the body entirely for processing as a whole. var bodyChunks = []; res.on('data', function(chunk) { // You can process streamed parts here... bodyChunks.push(chunk); }).on('end', function() { var body = Buffer.concat(bodyChunks); console.log('BODY: ' + body); // ...and/or process the entire body here. }) }); req.on('error', function(e) { console.log('ERROR: ' + e.message); }); 

एक सामान्य http.request(options, callback) फ़ंक्शन भी है जो आपको अनुरोध विधि और अन्य अनुरोध विवरण निर्दिष्ट करने की अनुमति देता है।

अनुरोध और सुपरएजेन्ट उपयोग करने के लिए बहुत अच्छे पुस्तकालय हैं।

request का उपयोग करना:

 var request=require('request'); request.get('https://someplace',options,function(err,res,body){ if(err) //TODO: handle err if(res.statusCode !== 200 ) //etc //TODO Do something with response }); 

आप नवागंतुक के लिए लिखा है, एक सचमुच शांत और बहुत ही सरल HTTP क्लाइंट Requestify का उपयोग कर सकते हैं + यह कैशिंग का समर्थन करता है

बस GET विधि अनुरोध के लिए निम्नलिखित करें:

 var requestify = require('requestify'); requestify.get('http://example.com/api/resource') .then(function(response) { // Get the response body (JSON parsed or jQuery object for XMLs) response.getBody(); } ); 

नॉरद से एचटीटीपी अनुरोध बनाने के लिए सबसे अच्छी लाइब्रेरी मुझे पूरी तरह से मिली है। यह एक मल्टीप्लेफ़्ट फ्रेमवर्क होने का लक्ष्य है, इसलिए नोड पर काम करना सीखने से आपको अच्छी तरह से सेवा मिल जाएगी यदि आपको रूबी, PHP, जावा, पायथन, ऑब्जेक्टिव सी,। नेट या विंडोज 8 पर एक HTTP क्लाइंट का उपयोग करने की आवश्यकता है। जहां तक ​​मैं बता सकता हूं कि असीमित पुस्तकालयों को ज्यादातर मौजूदा HTTP क्लाइंट्स द्वारा समर्थित हैं (उदाहरण के लिए जावा पर, अपाचे HTTP क्लाइंट, नोड पर, माइकल की अनुरोध लाइबरी) – केवल शीर्ष पर एक अच्छा एपीआई डालता है

यहां नोड। जेएस के लिए कुछ कोड उदाहरण दिए गए हैं:

 var unirest = require('unirest') // GET a resource unirest.get('http://httpbin.org/get') .query({'foo': 'bar'}) .query({'stack': 'overflow'}) .end(function(res) { if (res.error) { console.log('GET error', res.error) } else { console.log('GET response', res.body) } }) // POST a form with an attached file unirest.post('http://httpbin.org/post') .field('foo', 'bar') .field('stack', 'overflow') .attach('myfile', 'examples.js') .end(function(res) { if (res.error) { console.log('POST error', res.error) } else { console.log('POST response', res.body) } }) 

आप सीधे नोड डॉक्स पर कूद सकते हैं

टुकड़ा की जाँच करें यह एक नोड एचटीटीपी ग्राहक है जो बनाए गए और बनाए रखा है spire.io जो रीडायरेक्ट्स, सत्रों और जेएसएएन प्रतिक्रियाओं को नियंत्रित करता है। बाकी एपीआई के साथ बातचीत करने के लिए यह बहुत अच्छा है अधिक जानकारी के लिए इस ब्लॉग पोस्ट को देखें।

Httpreq की जाँच करें: यह एक नोड पुस्तकालय है जो मैंने बनाया है क्योंकि मैं निराश था कोई सरल http GET या Post मॉड्यूल वहाँ बाहर नहीं था 😉

यह संस्करण प्रारंभिक रूप से ब्रायनमैक फ़ंक्शन द्वारा प्रस्तावित किया गया है जो वादे, बेहतर त्रुटि हैंडलिंग का उपयोग करता है, और इसे ES6 में फिर से लिखा गया है।

 let http = require("http"), https = require("https"); /** * getJSON: REST get request returning JSON object(s) * @param options: http options object */ exports.getJSON = function(options) { console.log('rest::getJSON'); let reqHandler = +options.port === 443 ? https : http; return new Promise((resolve, reject) => { let req = reqHandler.request(options, (res) => { let output = ''; console.log('rest::', options.host + ':' + res.statusCode); res.setEncoding('utf8'); res.on('data', function (chunk) { output += chunk; }); res.on('end', () => { try { let obj = JSON.parse(output); // console.log('rest::', obj); resolve({ statusCode: res.statusCode, data: obj }); } catch(err) { console.error('rest::end', err); reject(err); } }); }); req.on('error', (err) => { console.error('rest::request', err); reject(err); }); req.end(); }); }; 

नतीजतन, आपको कॉलबैक फ़ंक्शन में पास करने की ज़रूरत नहीं है, बजाय getJSON () एक वादा वापस करता है निम्नलिखित उदाहरण में फ़ंक्शन का उपयोग एक एक्सप्रेसजएस रूट हेन्डलर के अंदर किया जाता है

 router.get('/:id', (req, res, next) => { rest.getJSON({ host: host, path: `/posts/${req.params.id}`, method: 'GET' }).then(({status, data}) => { res.json(data); }, (error) => { next(error); }); }); 

त्रुटि पर यह सर्वर त्रुटि से निपटने वाले मिडलवेयर को त्रुटि देता है।

यदि आपको सरल अनुरोध प्राप्त करने की आवश्यकता है और किसी भी अन्य HTTP विधि के लिए समर्थन की आवश्यकता नहीं है, तो इसे देखें: साधारण प्राप्त करें :

 var get = require('simple-get'); get('http://example.com', function (err, res) { if (err) throw err; console.log(res.statusCode); // 200 res.pipe(process.stdout); // `res` is a stream }); 

अनुरोध मॉड्यूल को देखो यहां संदर्भ http://www.sitepoint.com/making-http-requests-in-node-js/

Reqclient का उपयोग करें: प्रयोजन या कई अन्य पुस्तकालयों जैसे उद्देश्य स्क्रीप्टिंग के लिए तैयार नहीं है। Reqclient कंस्ट्रक्टर को कई कॉन्फ़िगरेशनों की अनुमति देता है, जब आपको समान विन्यास को बार-बार दोबारा उपयोग करने की आवश्यकता होती है: बेस यूआरएल, हेडर, ऑथ ऑप्शंस, लॉगिंग ऑप्शंस, कैशिंग, इत्यादि। इसमें क्वेरी और यूआरएल पार्सिंग, स्वचालित क्वेरी एनकोडिंग और JSON पार्सिंग इत्यादि।

लाइब्रेरी का उपयोग करने का सबसे अच्छा तरीका API को ऑब्जेक्ट को इंगित करने और इसके साथ कनेक्ट होने के लिए आवश्यक कॉन्फ़िगरेशन निर्यात करने के लिए एक मॉड्यूल तैयार करता है:

मॉड्यूल client.js :

 let RequestClient = require("reqclient").RequestClient let client = new RequestClient({ baseUrl: "https://myapp.com/api/v1", cache: true, auth: {user: "admin", pass: "secret"} }) module.exports = client 

और ऐसे नियंत्रकों में जहां आपको इस तरह एपीआई प्रयोग का उपभोग करने की जरूरत है:

 let client = require('client') //let router = ... router.get('/dashboard', (req, res) => { // Simple GET with Promise handling to https://myapp.com/api/v1/reports/clients client.get("reports/clients") .then(response => { console.log("Report for client", response.userId) // REST responses are parsed as JSON objects res.render('clients/dashboard', {title: 'Customer Report', report: response}) }) .catch(err => { console.error("Ups!", err) res.status(400).render('error', {error: err}) }) }) router.get('/orders', (req, res, next) => { // GET with query (https://myapp.com/api/v1/orders?state=open&limit=10) client.get({"uri": "orders", "query": {"state": "open", "limit": 10}}) .then(orders => { res.render('clients/orders', {title: 'Customer Orders', orders: orders}) }) .catch(err => someErrorHandler(req, res, next)) }) router.delete('/orders', (req, res, next) => { // DELETE with params (https://myapp.com/api/v1/orders/1234/A987) client.delete({ "uri": "orders/{client}/{id}", "params": {"client": "A987", "id": 1234} }) .then(resp => res.status(204)) .catch(err => someErrorHandler(req, res, next)) }) 

reqclient कई सुविधाओं का समर्थन करता है, लेकिन इसमें कुछ ऐसे हैं जो अन्य पुस्तकालयों द्वारा समर्थित नहीं हैं: कर्ल वाक्यविन्यास के साथ OAuth2 एकीकरण और लकड़हारी एकीकरण, और हमेशा मूल वादे वस्तुएं लौटाता है

यदि यह केवल रीडायरेक्ट करने के लिए है, तो आप एक साधारण रीडायरेक्ट स्क्रिप्ट का उपयोग कर सकते हैं जैसे कि,

 res.writeHead(301, { Location: "http" + (req.socket.encrypted ? "s" : "") + "://" + req.headers.host + loc, }); 

फिर, res.send();

जहां चर 'loc' कोई भी स्वरूपित (GET) क्वेरी स्ट्रिंग हो सकता है

प्राधिकरण मापदंडों सीधे ग्राहक मेजबान को भेजने के लिए बहुत अच्छी तरह से काम करता है।