जब आप request(url, callback)
के साथ http (ओं) अनुरोध प्रारंभ करते हैं, तो यह एक ईवेंट एमिटर इंस्टेंस (कुछ कस्टम गुणों/विधियों के साथ) देता है।
जब तक आप इस वस्तु पर अपने हाथों को प्राप्त कर सकते हैं (यह कुछ पुनर्रचना की आवश्यकता हो सकती या शायद यह भी आप के लिए उपयुक्त नहीं हो सकता है) आप एक error
घटना फेंकना है, इस प्रकार के साथ err
किया जा रहा है अपने कॉलबैक फायरिंग इस emitter कर सकते हैं आपके द्वारा उत्सर्जित त्रुटि।
निम्नलिखित कोड स्निपेट इसे प्रदर्शित करता है।
'use strict';
// Just importing the module
var request = require('request')
// google is now an event emitter that we can emit from!
, google = request('http://google.com', function (err, res) {
console.log(err) // Guess what this will be...?
})
// In the next tick, make the emitter emit an error event
// which will trigger the above callback with err being
// our Error object.
process.nextTick(function() {
google.emit('error', new Error('test'))
})
संपादित
इस दृष्टिकोण के साथ समस्या यह है कि, ज्यादातर स्थितियों में, पुनर्रचना का एक सा की आवश्यकता है। एक वैकल्पिक दृष्टिकोण इस तथ्य का फायदा उठाता है कि नोड के मूल मॉड्यूल पूरे आवेदन में कैश किए जाते हैं और फिर से उपयोग किए जाते हैं, इस प्रकार हम http
मॉड्यूल और संशोधित कर सकते हैं हमारे संशोधनों को देखेंगे। यह चाल http.request()
विधि बंदर-पैचिंग में है और इसमें तर्क का अपना थोड़ा सा इंजेक्शन है।
निम्नलिखित कोड स्निपेट इसे प्रदर्शित करता है।
'use strict';
// Just importing the module
var request = require('request')
, http = require('http')
, httpRequest = http.request
// Monkey-patch the http.request method with
// our implementation
http.request = function (opts, cb) {
console.log('ping');
// Call the original implementation of http.request()
var req = httpRequest(opts, cb)
// In next tick, simulate an error in the http module
process.nextTick(function() {
req.emit('error', new Error('you shall not pass!'))
// Prevent Request from waiting for
// this request to finish
req.removeAllListeners('response')
// Properly close the current request
req.end()
})
// We must return this value to keep it
// consistent with original implementation
return req
}
request('http://google.com', function (err) {
console.log(err) // Guess what this will be...?
})
मुझे लगता है कि काटने का निशान लगाना कुछ इसी तरह (http मॉड्यूल पर तरीकों की जगह) करता है तो मैं सुझाव है कि आप आप की आवश्यकता के बाद इस बंदर-पैच लागू (और शायद यह भी कॉन्फ़िगर किया गया?) नॉक।
ध्यान दें कि यह अपने कार्य को सुनिश्चित करें कि आप केवल जब सही URL अनुरोध किया जाता है (opts
वस्तु निरीक्षण) और मूल http.request()
कार्यान्वयन ताकि भविष्य परीक्षण अपने परिवर्तनों से प्रभावित नहीं हैं बहाल करने के लिए त्रुटि फेंकना बनाने के लिए किया जाएगा।
क्या आप अभी बुरा अनुरोध नहीं कर सकते? उदाहरण के लिए यूआरएल को '' '' या 'अपरिभाषित' में सेट करना। – agconti
@agconti नॉक के साथ आप सर्वर प्रतिक्रिया का मज़ाक उड़ाते हैं, मैं एक HTTP त्रुटि को मजबूर करने की कोशिश कर रहा हूं। नोड मैनुअल (http://nodejs.org/api/http.html#http_http_request_options_callback) _ अगर अनुरोध के दौरान कोई त्रुटि आई है (चाहे वह DNS रिज़ॉल्यूशन, टीसीपी स्तर त्रुटियों, या वास्तविक HTTP पार्स त्रुटियों के साथ हो) त्रुटि 'घटना लौटाई गई अनुरोध वस्तु पर उत्सर्जित होती है ._ – coolxeo
यह व्यवहार नकली-अप के लिए अप्रासंगिक है। क्या आपने इसे HTTP त्रुटि संदेश के साथ जवाब देने का प्रयास किया है? –