NodeJS - "सॉकेट हैंग होता है" वास्तव में क्या मतलब है?


276

मैं Node और Cheerio के साथ एक वेब स्क्रैपर का निर्माण कर रहा हूं, और एक निश्चित वेबसाइट के लिए मुझे निम्न त्रुटि मिल रही है (यह केवल इस एक वेबसाइट पर होती है, कोई अन्य नहीं जिसे मैं परिमार्जन करने की कोशिश करता हूं।

यह हर बार एक अलग स्थान पर होता है, इसलिए कभी-कभी यह url xत्रुटि को फेंक देता है, अन्य समय url xठीक है और यह पूरी तरह से एक अलग यूआरएल है:

    Error!: Error: socket hang up using [insert random URL, it's different every time]

Error: socket hang up
    at createHangUpError (http.js:1445:15)
    at Socket.socketOnEnd [as onend] (http.js:1541:23)
    at Socket.g (events.js:175:14)
    at Socket.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:910:16
    at process._tickCallback (node.js:415:13)

यह डिबग करने के लिए बहुत मुश्किल है, मैं वास्तव में नहीं जानता कि कहां से शुरू करना है। शुरू करने के लिए, क्या है एक सॉकेट त्रुटि लटका? क्या यह 404 त्रुटि या समान है? या इसका मतलब सिर्फ इतना है कि सर्वर ने कनेक्शन से इनकार कर दिया है?

मुझे इसका कहीं भी स्पष्टीकरण नहीं मिल रहा है!

संपादित करें: यहां कोड का एक नमूना है जो (कभी-कभी) रिटर्निंग त्रुटियां हैं:

function scrapeNexts(url, oncomplete) {
    request(url, function(err, resp, body) {

        if (err) {
            console.log("Uh-oh, ScrapeNexts Error!: " + err + " using " + url);
            errors.nexts.push(url);
        }
        $ = cheerio.load(body);
        // do stuff with the '$' cheerio content here
    });
}

कनेक्शन को बंद करने के लिए कोई प्रत्यक्ष कॉल नहीं है, लेकिन मैं उपयोग कर रहा हूं Node Requestजो (जहां तक ​​मैं बता सकता हूं) का उपयोग करता है http.getइसलिए यह आवश्यक नहीं है, मुझे गलत होने पर सही करें!

EDIT 2: यहां कोड का एक वास्तविक, इन-उपयोग बिट है जो त्रुटियों का कारण बन रहा है। prodURLऔर अन्य चर ज्यादातर jquery चयनकर्ता हैं जो पहले परिभाषित किए गए हैं। यह asyncनोड के लिए पुस्तकालय का उपयोग करता है ।

function scrapeNexts(url, oncomplete) {
    request(url, function (err, resp, body) {

        if (err) {
            console.log("Uh-oh, ScrapeNexts Error!: " + err + " using " + url);
            errors.nexts.push(url);
        }
        async.series([
                function (callback) {
                    $ = cheerio.load(body);
                    callback();
                },
                function (callback) {
                    $(prodURL).each(function () {
                        var theHref = $(this).attr('href');
                        urls.push(baseURL + theHref);
                    });
                    var next = $(next_select).first().attr('href');
                    oncomplete(next);
                }
            ]);
    });
}

26
इसका मतलब है कि सॉकेट endटाइमआउट अवधि के भीतर कनेक्शन ईवेंट नहीं भेजता है । यदि आपको http.request(नहीं http.get) के माध्यम से चीयरियो के लिए अनुरोध मिल रहा है । request.end()अनुरोध भेजने के लिए आपको कॉल करना होगा।
user568109

1
@ user568109 मुझे ध्यान देना चाहिए, मैं नोड requestसेवा का उपयोग कर रहा हूं , विशेष http.requestअनुरोध नहीं (मुझे लगता है, मैं नोड के लिए बहुत नया हूं!)। यह एक है: github.com/mikeal/request ऐसा लगता है कि यह अनुरोध को स्वचालित रूप से पूरा करता है, नहीं? संपादित करें: डॉक्स के अनुसार, http method, defaults to GETइसलिए यह मुद्दा नहीं है।
JVG

2
तब यह समस्या नहीं होनी चाहिए। क्या होता है अगर आप चीर-फाड़ सहित स्क्रैपिंग भाग को टिप्पणी करते हैं और उसी सामग्री को वापस करते हैं। यहाँ पकड़ है, cheerio.loadअतुल्यकालिक है। इससे पहले कि आप $ के साथ सामान करना शुरू न करें।
user568109

4
मैंने कभी-कभी यह भी पाया है कि अगर मैं किसी साइट को बहुत आक्रामक तरीके से क्रॉल करता हूं (जैसे 10+ एक साथ कनेक्शन) तो वे सॉकेट हैंग-अप के साथ प्रतिक्रिया देना शुरू कर देंगे, इसलिए यह भी हो सकता है।
tobek

1
सिर्फ FYI करें, अंग्रेजी में, कनेक्शन को काटकर इलेक्ट्रॉनिक वार्तालाप को समाप्त करने काhang up मतलब है ; पुराने जमाने के टेलीफोन को लटकाने से उत्पन्न हुआ।
Константин Ван

जवाबों:


161

socket hang upफेंके जाने पर दो मामले सामने आते हैं :

जब आप एक ग्राहक हैं

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

जब आप एक सर्वर / प्रॉक्सी हैं

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

यह स्टैक ट्रेस दिखाता है कि जब क्लाइंट अनुरोध को रद्द करता है तो क्या होता है।

Trace: { [Error: socket hang up] code: 'ECONNRESET' }
    at ClientRequest.proxyError (your_server_code_error_handler.js:137:15)
    at ClientRequest.emit (events.js:117:20)
    at Socket.socketCloseListener (http.js:1526:9)
    at Socket.emit (events.js:95:17)
    at TCP.close (net.js:465:12)

खासतौर पर @Blender द्वारा ऊपर बताए गए लाइन http.js:1526:9पॉइंट्स socketCloseListener:

// This socket error fired before we started to
// receive a response. The error needs to
// fire on the request.
req.emit('error', createHangUpError());

...

function createHangUpError() {
  var error = new Error('socket hang up');
  error.code = 'ECONNRESET';
  return error;
}

यह एक विशिष्ट मामला है अगर क्लाइंट ब्राउज़र में उपयोगकर्ता है। कुछ संसाधन / पृष्ठ लोड करने के अनुरोध में लंबा समय लगता है, और उपयोगकर्ता केवल पृष्ठ को ताज़ा करते हैं। इस तरह की कार्रवाई पिछले अनुरोध को समाप्त करने का कारण बनती है जो आपके सर्वर की ओर से इस त्रुटि को फेंकता है।

चूंकि यह त्रुटि क्लाइंट की इच्छा के कारण होती है, इसलिए उन्हें कोई त्रुटि संदेश प्राप्त होने की उम्मीद नहीं है। इसलिए, इस त्रुटि को गंभीर मानने की आवश्यकता नहीं है। बस इसे नजरअंदाज करें। यह इस तथ्य से प्रोत्साहित किया जाता है कि इस तरह की त्रुटि पर resआपके ग्राहक ने जिस सॉकेट की बात सुनी है, हालांकि अभी भी लिखने योग्य है, नष्ट हो गया है।

console.log(res.socket.destroyed); //true

तो, प्रतिक्रिया वस्तु को स्पष्ट रूप से बंद करने के अलावा, कुछ भी भेजने का कोई मतलब नहीं है:

res.end();

हालांकि, क्या आप क्या करना चाहिए यदि आप सुनिश्चित करने के लिए कर रहे हैं एक प्रॉक्सी सर्वर जो पहले से ही नदी के ऊपर करने के लिए अनुरोध रिले की जाती है, नदी के ऊपर करने के लिए अपने आंतरिक अनुरोध निरस्त करने के लिए, जवाब में अपनी रुचि के अभाव, जो बारी में नदी के ऊपर बता देगा का संकेत देती है सर्वर, शायद, एक महंगा ऑपरेशन बंद करो।


2
मैं, ग्राहक के रूप में, अनुरोध का अधिक समय तक इंतजार कैसे कर सकता हूं? यह 35 सेकंड में गलत हो रहा है और मुझे इसके बारे में एक मिनट इंतजार करने की जरूरत है।
बिग मनी

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

@BigMoney का आप उपयोग कर सकते हैं setTimeout()। इस सवाल को देखें: stackoverflow.com/questions/6214902/…
holla

आपके विवरण ने मुझे नरक से बचा लिया, मैं अपस्ट्रीम सर्वर और क्लाइंट के बीच एक प्रॉक्सी सर्वर के रूप में नोड.जेएस का उपयोग कर रहा था, अनुरोध पर टाइमआउट ने इस त्रुटि को सिर्फ इसलिए फेंक दिया क्योंकि मैं उपयोग करना भूल गया res.send, धन्यवाद
फरज़ाद वाईजेड

जब आप एक ही कनेक्शन पर Django के विकास वेब सर्वर के लिए दूसरा अनुरोध करने की कोशिश कर रहे हैं, तो आप "सॉकेट हैंग" प्राप्त कर सकते हैं। यह समर्थन नहीं करता है keep-alive। और यदि आपका ग्राहक यह उम्मीद करता है कि आपको त्रुटि मिलेगी। यह निम्नलिखित पंक्तियों के साथ दिखता है ।
x- यूरी

53

स्रोत पर एक नज़र डालें :

function socketCloseListener() {
  var socket = this;
  var parser = socket.parser;
  var req = socket._httpMessage;
  debug('HTTP socket close');
  req.emit('close');
  if (req.res && req.res.readable) {
    // Socket closed before we emitted 'end' below.
    req.res.emit('aborted');
    var res = req.res;
    res.on('end', function() {
      res.emit('close');
    });
    res.push(null);
  } else if (!req.res && !req._hadError) {
    // This socket error fired before we started to
    // receive a response. The error needs to
    // fire on the request.
    req.emit('error', createHangUpError());
    req._hadError = true;
  }
}

संदेश तब उत्सर्जित होता है जब सर्वर कभी भी प्रतिक्रिया नहीं भेजता है।


2
एक कार्यात्मक दृष्टिकोण से आप बता सकते हैं कि इसका क्या मतलब है? मैं यहां सुरक्षा कवच बनाने की कोशिश कर रहा हूं ताकि आपत्तिजनक उरोजों को एक सरणी में जोड़कर बाद में उन्हें स्क्रैप किया जा सके। मैंने कुछ स्थानों पर पढ़ा है कि त्रुटियाँ नोड के साथ एक समस्या हो सकती हैं, उपाय और इससे बचने का सबसे अच्छा तरीका नहीं जानते हैं।
JVG

5
लेकिन यह कब तक इंतजार करता है?
कॉममाटोस्ट

2
इसे "कब तक" के कार्यान्वयन के लिए en.wikipedia.org/wiki/Exponential_backoff का उपयोग करना चाहिए ।
नॉर्मन एच

यह "सॉकेट हैंग अप" अर्थहीन है। यह नोडज टीम से सिर्फ एक आश्चर्य है।
पचू

45

उल्लेख करने लायक एक मामला: जब एक्सप्रेस का उपयोग करते हुए Node.js से Node.js से कनेक्ट किया जाता है, तो मुझे "/" के साथ अनुरोधित URL पथ को उपसर्ग न करने पर "सॉकेट हैंग हो जाता है"।


1
यह मेरी समस्या थी, शुद्ध http नोड में दोनों क्लाइंट और सर्वर। js
ashley

1
@silentorb: क्या आप कृपया उदाहरण url दिखा सकते हैं? मैं इस मामले में उसी त्रुटि का सामना कर रहा हूं .. धन्यवाद।
प्रीतम

4
त्रुटि: "उपयोगकर्ता / लॉगिन", सफलता: "/ उपयोगकर्ता / लॉगिन"
सिलोरब

4
यार मैंने इसे डिबग करने में लगभग एक घंटा लगा दिया है! अपना उत्तर देखा और SH ** सोचा, / जोड़ा और यह ठीक काम करता है :) धन्यवाद!
डैनियल ग्रूसज़िक

4
आपने इस प्रतिक्रिया के साथ मुझे घंटों बचाया!
20:24 पर imhotep

32

मैं https सेवा require('http')का उपभोग करता था और यह " " दिखाया गया था ।socket hang up

तब मैं बदल require('http')करने के require('https')बजाय, और यह काम कर रहा है।


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

19
टिप्पणी के लिए धन्यवाद। मैं इस त्रुटि के लिए अपना समय बर्बाद करता हूं। अंत में, मैं सिर्फ इस समाधान की कोशिश करता हूं और यह काम करता है। बस शेयर करना चाहते हैं आशा है कि यह अन्य के लिए उपयोगी है कि वे अपना समय बर्बाद न करें, उच्च गुणवत्ता वाले उत्तर के रूप में प्रशंसा न करें।
अनेकाविट चन्नप

12
@JohannesDorn यह प्रश्न का एक अंतर्निहित उत्तर है कि त्रुटि का क्या अर्थ है। और उस पर एक उपयोगी है।
उलद कासच

29

नीचे एक सरल उदाहरण है जहां मुझे वही त्रुटि मिली जब मैं नीचे दिए गए उदाहरण में टिप्पणी कोड जोड़ने से चूक गया। कोड req.end()को रद्द करने से यह समस्या हल हो जाएगी।

var fs = require("fs");
var https = require("https");

var options = {
    host: "en.wikipedia.org",
    path: "/wiki/George_Washington",
    port: 443,
    method: "GET"
};

var req = https.request(options, function (res) {
    console.log(res.statusCode);
});


// req.end();

2
इससे मेरी पवित्रता बच गई ... धन्यवाद!
पीजीअलाघेर

तुम हीरो हो! धन्यवाद।
ज़नहट

17

ब्लेंडर के उत्तर पर विस्तार, यह कई स्थितियों में होता है। मेरे द्वारा चलाए जाने वाले सबसे आम हैं:

  1. सर्वर क्रैश हो गया।
  2. सर्वर ने आपके कनेक्शन से इनकार कर दिया, सबसे अधिक संभावना है कि वह अवरुद्ध है User-Agent

socketCloseListener, जैसा कि ब्लेंडर के उत्तर में उल्लिखित है, केवल वही स्थान नहीं है जो हैंगअप त्रुटियां बनाई गई हैं।

उदाहरण के लिए, यहां पाया गया :

function socketOnEnd() {
  var socket = this;
  var req = this._httpMessage;
  var parser = this.parser;

  if (!req.res) {
    // If we don't have a response then we know that the socket
    // ended prematurely and we need to emit an error on the request.
    req.emit('error', createHangUpError());
    req._hadError = true;
  }
  if (parser) {
    parser.finish();
    freeParser(parser, req);
  }
  socket.destroy();
}

आप curlहेडर के साथ प्रयास कर सकते हैं और ऐसे जिन्हें नोड से बाहर भेजा जा रहा है और देखें कि क्या आपको वहां कोई प्रतिक्रिया मिलती है। यदि आपको कोई प्रतिक्रिया नहीं मिलती है curl, लेकिन आपको अपने ब्राउज़र में प्रतिक्रिया मिलती है, तो आपके User-Agentहेडर के अवरुद्ध होने की संभावना है।


3
एक अन्य कारण सर्वर आपके कनेक्शन को मना कर सकता है (मैं क्यूए के बजाय उत्पादों को स्थानांतरित करते समय इसे हिट करता हूं), यदि आपका सर्वर http के बजाय https अनुरोध की उम्मीद कर रहा है।
जूल

7

उल्लेख के लायक एक और मामला (लिनक्स और ओएस एक्स के लिए) यह है कि यदि आप httpsअनुरोधों को पूरा करने के लिए किसी पुस्तकालय का उपयोग करते हैं, या यदि आप https://...स्थानीय रूप से दिए गए उदाहरण के URL के रूप में पास होते हैं, तो आप पोर्ट का उपयोग करेंगे 443जो एक आरक्षित निजी बंदरगाह है और आप Socket hang upया ECONNREFUSEDत्रुटियों में समाप्त हो सकता है ।

इसके बजाय, पोर्ट 3000, फ़े का उपयोग करें , और एक httpअनुरोध करें।


6

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

var KeepAliveAgent = require('agentkeepalive');

var myagent = new KeepAliveAgent({
    maxSockets: 10,
    maxKeepAliveRequests: 0,
    maxKeepAliveTime: 240000
});

nano = new Nano({
    url : uri,
    requestDefaults : {
        agent : myagent
    }
});

कुछ संघर्ष के बाद मैं समस्या को हल करने में सक्षम था - जैसा कि यह निकला कि यह बहुत, बहुत सरल गलती थी। मैं HTTPS प्रोटोकॉल के माध्यम से डेटाबेस से जुड़ रहा था, लेकिन मैं अपने नैनो ऑब्जेक्ट को एक रखने योग्य एजेंट बना रहा था, जो इस लाइब्रेरी शो के उपयोग के लिए उदाहरण के रूप में बनाया गया था (वे कुछ डिफ़ॉल्टों पर भरोसा करते हैं जो http का उपयोग करते हैं)।

HttpsAgent ने चाल का उपयोग करने के लिए एक सरल परिवर्तन किया:

var KeepAliveAgent = require('agentkeepalive').HttpsAgent;

1
थोड़ा और अधिक विस्तार के लिए, यदि अनुरोध पोर्ट 443 के लिए कॉन्फ़िगर किया गया है और अनुरोध http मॉड्यूल के बजाय http मॉड्यूल के माध्यम से जारी किया गया है, तो आपको सॉकेट लटका हुआ मिलता है। अच्छा होगा यदि डिस्कनेक्ट क्यों हुआ (SSL / TLS बातचीत?) पर अधिक विवरण था। मैंने उदाहरण के लिए ASP.NET में विस्तार का स्तर देखा है।
रिचर्ड कोलेट

6

इससे मुझे समस्या हुई, क्योंकि मैं यहां सूचीबद्ध सब कुछ कर रहा था, लेकिन अभी भी त्रुटियों को दूर किया जा रहा था। यह पता चला है कि कॉलिंग req.abort () वास्तव में ECONNRESET के कोड के साथ एक त्रुटि फेंकता है, इसलिए आपको वास्तव में अपनी त्रुटि हैंडलर में पकड़नी होगी।

req.on('error', function(err) {
    if (err.code === "ECONNRESET") {
        console.log("Timeout occurs");
        return;
    }
    //handle normal errors
});

5

के लिए requestमॉड्यूल उपयोगकर्ताओं

समय समाप्ति

टाइमआउट दो मुख्य प्रकार हैं: कनेक्शन टाइमआउट और टाइमआउट पढ़ें । एक कनेक्ट टाइमआउट होती है तो टाइमआउट अपने ग्राहक एक दूरस्थ मशीन (करने के लिए इसी से कनेक्शन स्थापित करने के लिए प्रयास कर रहा है, जबकि मारा जाता है connect()सॉकेट पर कॉल)। एक पढ़ा टाइमआउट किसी भी समय सर्वर भी वापस प्रतिक्रिया का एक हिस्सा भेजने के लिए धीमी है होता है।

ध्यान दें कि कनेक्शन टाइमआउट एक ETIMEDOUTत्रुटि का उत्सर्जन करता है, और पढ़ने वाला टाइमआउट एक ECONNRESETत्रुटि का उत्सर्जन करता है।


3

मुझे कुछ सर्वर के अनुरोध के दौरान भी यही समस्या थी। मेरे मामले में, अनुरोध विकल्पों में हेडर में उपयोगकर्ता-एजेंट के लिए कोई भी मूल्य निर्धारित करने से मुझे मदद मिली।

const httpRequestOptions = {
    hostname: 'site.address.com',
    headers: {
       'User-Agent': 'Chrome/59.0.3071.115'
    }
};

यह सामान्य मामला नहीं है और सर्वर सेटिंग्स पर निर्भर करता है।


2

इसके अलावा इसका कारण का उपयोग करने का हो सकता है appके कहने expressके बजाय serverसे const server = http.createServer(app)सर्वर सॉकेट बनाने।

गलत

const express = require('express');
const http = require('http');
const WebSocket = require('ws');


const app = express();

app.use(function (req, res) {
  res.send({ msg: "hello" });
});

const wss = new WebSocket.Server({ server: app }); // will throw error while connecting from client socket

app.listen(8080, function listening() {
  console.log('Listening on %d', server.address().port);
});

सही बात

const express = require('express');
const http = require('http');
const WebSocket = require('ws');


const app = express();

app.use(function (req, res) {
  res.send({ msg: "hello" });
});

const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

server.listen(8080, function listening() {
  console.log('Listening on %d', server.address().port);
});

1

मैं वेब (नोड) और एंड्रॉइड डेवलपमेंट दोनों करता हूं, और एंड्रॉइड स्टूडियो डिवाइस सिम्युलेटर खोलता हूं और एक साथ socket hang upकाम करता हूं, दोनों पोर्ट 8601 का उपयोग करते हैं, इसने एंड्रॉइड स्टूडियो डिवाइस सिम्युलेटर को बंद करने के बाद त्रुटि की शिकायत की , और यह नोड पक्ष में अच्छी तरह से काम करता है। एंड्रॉइड स्टूडियो डिवाइस सिम्युलेटर और डॉकटर का एक साथ उपयोग न करें।


1

OCP क्लस्टर पर CouchDB का उपयोग करते समय मुझे एक समान त्रुटि मिली।

const cloudantSessionStore = sessionStore.createSessionStore(
  {
    type: 'couchdb',
    host: 'https://' + credentials['host'],
    port: credentials['port'],
    dbName: 'sessions',
    options: {
      auth: {
        username: credentials['username'],
        password: credentials['password']
      },
      cache: false
    }
  }

मेरे CouchDB उदाहरण से जुड़ने के लिए "http", "https" नहीं होना चाहिए। आशा है कि यह किसी के लिए भी मददगार हो सकता है जो समान मुद्दे से सामना कर रहा हो।


0

मेरे मामले में, यह इसलिए था क्योंकि एक आवेदन / json प्रतिक्रिया बुरी तरह से स्वरूपित थी (जिसमें स्टैक ट्रेस होता है)। प्रतिक्रिया कभी भी सर्वर को नहीं भेजी गई थी। यह डिबग करने के लिए बहुत मुश्किल था क्योंकि, कोई लॉग नहीं थे। यह धागा मुझे समझने में बहुत मदद करता है कि क्या होता है।


0

यदि आप नोड-http-प्रॉक्सी का उपयोग कर रहे हैं, तो कृपया इस मुद्दे से अवगत रहें, जिससे सॉकेट हैंग-अप त्रुटि होगी: https://github.com/nodejitsu/node-http-proxy/issues/180

रिज़ॉल्यूशन के लिए, इस लिंक में भी, एक्सप्रेस से पहले रूट रूट (प्रॉक्सी के लिए) घोषित करते हुए आगे बढ़ें।


0

कल इस मुद्दे पर भागकर IntelliJ IDEA 2016.3.6 के माध्यम से मेरे वेब एप्लिकेशन और नोड.जेएस सर्वर को चला रहा है। मुझे बस इतना करना था कि मैं अपने क्रोम ब्राउजर में अपनी कुकीज़ और कैश को साफ कर दूं।


0

यदि आप एक https कनेक्शन पर इस त्रुटि का सामना कर रहे हैं और यह तुरंत हो रहा है तो यह SSL कनेक्शन स्थापित करने में समस्या हो सकती है।

मेरे लिए यह मुद्दा था https://github.com/nodejs/node/issues/9845 लेकिन आपके लिए यह कुछ और हो सकता है। यदि यह ssl के साथ कोई समस्या है, तो आपको इसे केवल डोमेन से कनेक्ट करने के लिए नोड्ज tls / ssl पैकेज के साथ पुन: पेश करने में सक्षम होना चाहिए


0

मुझे लगता है कि ध्यान देने योग्य ...

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

अर्थात्, मैं को नष्ट करने के लिए किया था connection, acceptऔर content-lengthसाथ अग्रेषित करने के लिए अनुरोध मॉड्यूल उपयोग करने से पहले हेडर।

let headers = Object.assign({}, req.headers);
delete headers['connection']
delete headers['accept']
delete headers['content-length']
res.end() // We don't need the incoming connection anymore
request({
  method: 'post',
  body: req.body,
  headers: headers,
  json: true,
  url: `http://myapi/${req.url}`
}, (err, _res, body)=>{
  if(err) return done(err);
  // Test my api response here as if Google sent it.
})

0

मेरा मामला यह है कि यह एक त्रुटि नहीं थी, लेकिन क्रोम ब्राउज़र के लिए अपेक्षित व्यवहार था। Chrome tls कनेक्शन को जीवित रखता है (गति के लिए मुझे लगता है), लेकिन नोड.जेएस सर्वर 2 मिनट के बाद इसे बंद कर देता है और आपको एक त्रुटि मिलती है।

यदि आप एज ब्राउज़र का उपयोग करके GET अनुरोध का प्रयास करते हैं, तो कोई त्रुटि नहीं होगी। यदि आप क्रोम विंडो बंद करेंगे - तो आपको तुरंत त्रुटि मिल जाएगी।

इसलिए क्या करना है? 1) आप इस त्रुटियों को फ़िल्टर कर सकते हैं, क्योंकि वे वास्तव में त्रुटियां नहीं हैं। 2) शायद एक बेहतर उपाय है :)


0

यहां एक अतिरिक्त मामला प्रतीत होता है, जो इलेक्ट्रॉन "लोकलहोस्ट" डोमेन नाम का प्रशंसक नहीं है। मेरे मामले में मुझे इसे बदलने की आवश्यकता थी:

const backendApiHostUrl = "http://localhost:3000";

इसके लिए:

const backendApiHostUrl = "http://127.0.0.1:3000";

उसके बाद समस्या बस चली गई।

इसका अर्थ है कि DNS रिज़ॉल्यूशन (स्थानीय या रिमोट) कुछ समस्याओं का कारण हो सकता है।


0

नोड जेएस कोड में लंबे डिबग के बाद, मोंडोडब कनेक्शन स्ट्रिंग, कॉर्स आदि की जांच, मेरे लिए बस एक अलग पोर्ट नंबर पर स्विच करने server.listen(port);से यह काम कर गया postman, इसमें भी प्रयास करें। proxyकेवल चूक के लिए कोई परिवर्तन नहीं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.