Request: خطأ: مأخذ قطع الاتصال

تم إنشاؤها على ٣١ يناير ٢٠١٦  ·  77تعليقات  ·  مصدر: request/request

مرحبًا ، أعلم أنه تم إنشاء مثل هذه المشكلات من قبل ، ولكن كان هناك وصف مختلف قليلاً.

حاولت تنفيذ طلب بسيط: إرسال بيانات النموذج. ولكن عندما أستخدم وحدة الطلب ، فإنه يرمي دائمًا "إغلاق المقبس".

أدناه حالة الاختبار والنتائج البسيطة

'use strict';

const request = require('request');
const http = require('http');
const querystring = require('querystring');

const data = {
    xstext: 'I have a some problem about node.js server. What should I do to solve the this problem?',
    spintype: 0,
    removeold: 0,
};

// Using request
request(
    {
        method: 'POST',
        url: 'http://address:9017/',
        form: data,
    },
    (error, responce, body) => {
        if (!error) {
            console.log(body, responce);
            return;
        }
        console.log(error);
    }
);

// Using native http
let postData = querystring.stringify(data);

let options = {
    hostname: 'address',
    port: 9017,
    path: '/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': postData.length,
    },
};

let req = http.request(options, (res) => {
    console.log(`STATUS: ${res.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
});

req.on('error', (e) => {
    console.log(`problem with request: ${e.message}`);
});

req.write(postData);
req.end();

لوحدة الطلب:

{ [Error: socket hang up] code: 'ECONNRESET' }

بالنسبة إلى http الأصلي:

STATUS: 200
HEADERS: {"content-length":"98","content-type":"text/html","cache-control":"no-cache","connection":"keep-close"}
BODY: Excellent some problem about client. js server. What must i do to solve the particular this issue?
No more data in response.

يبدو أنه خطأ حقًا في وحدة الطلب.

Not enough info (see CONTRIBUTING.md)

التعليق الأكثر فائدة

شخص ما ينقذني: الملاك:

ال 77 كومينتر

لدي نفس المشكلة ، ولكن إضافة الخيار gzip:true سيعمل.

ما هو إصدار node.js الذي تستخدمه؟ نشهد أحيانًا استثناءات ECONNRESET بعد الترقية من 0.10 إلى 0.12. من خلال التنقيب في أخطاء node.js ، يبدو أن هذا قد تم كسره في 0.12 وتم إصلاحه بعد ذلك.

نفس المشكلة هنا. أي تحديثات؟ أنا أستخدم node.js 4.2.2 وأحصل على خطأ دوري (3-4 مرات في الدقيقة) ECONNRESET.

مرحبًا aymeba ، يبدو أن الإصدار 4.x الأول الذي يحتوي على هذا الإصلاح هو 4.4.0.

ابحث عن الالتزامات بعنوان http: handle errors on idle sockets . هناك مجموعة من الالتزامات المختلفة بهذا العنوان ، حيث تم تطبيقه على الفروع المختلفة.

لا تهتم ، لقد شعرت بالارتباك وكنت أتحدث عن خطأ ECONNRESET في node.js (# 3595).

لا أعتقد أن هذا يحدث بسبب الخطأ الذي أشرت إليه. في حالتنا يبدو:

  • إرسال طلب إلى خلفيتنا
  • الواجهة الخلفية تعالج الطلب
  • يتم قطع اتصال الطلب بطريقة ما دون انتظار الاستجابة ونحن نحصل على ECONNRESET
  • نحن على يقين من أن خادم الواجهة الخلفية لدينا لا يقطع الاتصال

أنا في حيرة من أمري لتلقي هذا الخطأ لأنه في الحالة المعتادة ، يجب أن يعرض خادمنا الخلفي هذا الخطأ أو؟

أي تحديث حول هذا ؟. أرى الخطأ في botkit 0.2.1.

أواجه مشكلة مشابهة. لقد أجريت ساعات من البحث والاختبار وتصحيح الأخطاء. في حالتي ، فإن النشر إلى نفس restapi عبر Postman ، فإن نقطة النهاية تعمل بشكل جيد. فشل إجراء الطلب عبر استدعاء http.request NodeJS الأصلي. جميع الرؤوس والحمولة (النص الأساسي) متطابقة. (إلا أنه ليس لدي رمز ساعي البريد في الرؤوس)

الكشف الكامل ، أنا أستخدم restify لخادمي.

في حالة استخدامك لـ restify على جانب الخادم ، فسيساعد ذلك على تمكين المدقق ، والذي يجب أن يوفر بعض التلميح حول ما يجري. تأكد أيضًا من تعيين "نوع المحتوى" الصحيح في طلبك حتى يعرف الخادم ما يمكن توقعه. لقد رأيت هذا الخطأ عندما يسيء الخادم فهم الطلب ، لذا فإن توفير نوع المحتوى سيساعد.

أي تعديل حدث في هذه القضية؟ ما زلت أرى هذه المشكلة تحدث مع Node v5.0.0. أرى أنه يتسبب في حدوث خطأ بعد 45 ثانية بالضبط من وقت تقديم الطلب.

لقد رأيت نفس المشكلة مع HapiJS. كانت المشكلة عبارة عن عنوان طول محتوى خاطئ

اريد تقديم طلب للاشتراك و اشعار شكرا ...

يحدث مع Node v6.9.2.

  get: async function(ctx) {
    let body = await new Promise(function(resolve, reject) {
      return ctx.req.pipe(request('/path/to/my/backend', function(err, res, body) {
        if (err) { return reject(err) }
        resolve(body)
      }))
    })
    return body
  }

أرى هذا أيضًا مع العقدة 6.6.0. الخادم الذي أتصل به لا يرسل عنوان Content-Length في الاستجابة ، وفي هذه الحالة وفقًا لمواصفات HTTP ، يجب على الخادم إغلاق الدفق بعد إرسال جميع البيانات. أظن أن هذا يساء تفسيره على أنه إغلاق المقبس. إجراء نفس الطلب باستخدام cURL يعمل بشكل جيد.

+1
العقدة 6.9.4
طلب 2.79.0

يعمل بشكل جيد مع الضفيرة
عنوان url أحاول الحصول على عنوان إرجاع Content-Length

+1
العقدة 6.9.1
طلب 2.79.0

Wget ، curl - نجاح ، لكن طلب - خطأ.

العقدة - v6.9.4
الطلب - 2.79.0

# node req.js
REQUEST { uri: 'http://wtfismyip.com', callback: [Function] }
REQUEST make request http://wtfismyip.com/

{ Error: socket hang up
    at createHangUpError (_http_client.js:254:15)
    at Socket.socketOnEnd (_http_client.js:346:23)
    at emitNone (events.js:91:20)
    at Socket.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }

تواجه نفس المشكلة. ومن المثير للاهتمام أنه يبدو مستقلاً عن إصدار الطلب حيث يعمل نفس الرمز بالنسبة لي في الإصدار 6.4.0 ، ولكنه يكسر 6.9.2 (هذه فقط نسختان من nodejs قمت بتثبيتهما).

في حالتي ، تمكنت من حل المشكلة عن طريق تعيين رأس Connection: keep-alive .

dieseldjango شكرا على الاقتراح. لم يحل حالتي رغم ذلك.

إليك موقع يعرض هذا الخطأ لإعادة إنتاجه:

{ request: 
   { debugId: 1,
     uri: 'https://www.deal.no/',
     method: 'GET',
     headers: 
      { Connection: 'keep-alive',
        host: 'www.deal.no',
        'accept-encoding': 'gzip, deflate' } } }
error:  Error: socket hang up
    at TLSSocket.onHangUp (_tls_wrap.js:1111:19)
    at TLSSocket.g (events.js:291:16)
    at emitNone (events.js:91:20)
    at TLSSocket.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

.. باستخدام طلب التصحيح لتصحيح أخطاء الرؤوس المرسلة

لم يتم حل هذا بعد؟ كانت تعمل بشكل جيد منذ أسبوعين وأنا الآن أتلقى هذا الخطأ
{ [Error: socket hang up] code: 'ECONNRESET', response: undefined }
عقدة -v 4.4.7

حاول إزالة "Accept-encoding": حل "gzip، deflate" في الرؤوس.

أرى الناس يحصلون على هذا الخطأ بشكل متكرر. في حالتي كان الأمر بسيطًا حقًا. ما كنت على الرغم من أنه عنوان URL تم تكوينه بشكل صحيح استنادًا إلى إحدى الخوارزميات الخاصة بي ، كان في الواقع مشوهًا. أشجعكم جميعًا الذين يواجهون هذه المشكلة على افتراض أن المشكلة تكمن في شفرتكم. أؤكد لك ، في 98٪ من الحالات ، السبب الجذري هو شيء عادي تعتبره أمرًا مفروغًا منه أو تتجاهله. لقد جربت كل ما سبق لحل المشكلة ، ولكن في النهاية ، وصل الأمر إلى شرطة مائلة إضافية للأمام.

أحاول أن أتبع كل ما تقترحه ، لكن هذه المشكلة لا تزال تحدث. فى غاية الحزن....

إذا كان ذلك يساعد أي شخص ، فقد عملت في النهاية على حل المشكلة باستخدام تتطلب ('child_process'). exec لاستدعاء curl. تأكد من تعقيم المدخلات الخاصة بك بشكل صحيح إذا كانت قادمة من userland.

يرجى محاولة طلب google.com => hostname: "google.com" للتحقق من أنها تعمل أم لا.
في حالتي ، كان "hostname" يتعامل مع nginx كوكيل ولا يستجيب عند تلقي الطلب بنص فارغ.
هذا الرمز الحصول على خطأ:

var http = require("http");
var options = {
  hostname: 'myAddressNginx',
  port: 80,
  path: '/',
  method: 'GET',
  headers: {
    'Content-Type': 'text/html',
    'Content-Length': Buffer.byteLength("")
  }
};

var req = http.request(options, (res) => {
  res.on('data', (chunk) => {console.log("%s", chunk);});
  res.on('end', () => {});
});

// write data to request body
req.write("");
req.end();

هذا الرمز يعمل

var http = require("http");
var options = {
  hostname: 'myAddressNginx',
  port: 80,
  path: '/',
  method: 'GET',
  headers: {
    'Content-Type': 'text/html',
    'Content-Length': Buffer.byteLength("")
  }
};

var req = http.request(options, (res) => {
  res.on('data', (chunk) => {console.log("%s", chunk);});
  res.on('end', () => {});
});

// write data to request body
req.write("abc");
req.end();

+1
العقدة 6.9.5

مرحبًا يا شباب ، لدي نفس المشكلة. +1
لحسن الحظ ، أستخدم "الطلب" ضمن أداة المراقبة الثانية ، لذا فإن مشاكلي ضئيلة للغاية. أحب node.js كثيرًا ، لذلك أنشر بعض التعليقات. آمل أن تساعد ملاحظاتي قليلاً في محاولاتك لإصلاح المشكلة.

يظهر الخطأ الآن بشكل متسق في بيئات إنتاج ذات حركة مرور عالية.
يمكنني تدوير نسخة طبق الأصل "دقيقة" للخادم والخطأ "لا يظهر أبدًا". يمكنني تبديل نقاط النهاية ، وينتهي الأمر دائمًا ببيئة إنتاج عالية الحركة تسبب هذا الخطأ للعميل.
{[خطأ: قطع الاتصال بالمقبس] رمز: 'ECONNRESET'}.

بدأ هذا كخطأ متقطع لاحظته منذ عدة أيام وبعد أن انذرت خدمة المراقبة الخاطئة عدة مرات ... وبعد عدة مرات من الاختبار باستخدام أدوات اختبار الإنتاج التي لا تستخدم "طلب" بدأت البحث في الويب للعثور على هذه المشكلة هنا.

الآن لم أقم بتغيير أي رمز / إصدار خلال أكثر من 8 أشهر لهذا التطبيق وأنا في حيرة من أمري كيف يمكن أن يحدث هذا من أي مكان. إذن ... ما الذي تغير في عالم "الطلب" إذا لم أغير أي كود عميل؟

+1
العقدة 6.9.1

يحدث هذا فقط بين الحين والآخر ، عندما أقوم باختبار نقاط النهاية الخاصة بي محليًا ، وتشغيل العديد من الطلبات بطريقة سريعة إلى حد ما ...

نواجه أيضًا نفس المشكلة مع node4 و node6. تعمل بشكل جيد مع العقدة 0.12.

الرجاء المساعدة في إصلاح هذا.

مشكلة مماثلة في مشكلة طلب https الأصلي
شاهد المزيد هنا ،

إضافة أدناه لطلب الخيار سيتجاوز (إصلاح) هذه المشكلة ،

agentOptions: {
  ciphers: 'DES-CBC3-SHA'
}

لقد علقت وقضيت فترة الظهيرة بأكملها في محاولة لمعرفة ذلك ... كان في بيئة معقدة مع عدة طبقات من إعادة التوجيه: is this DNS issue? -> no way it's DNS -> definitely DNS -> no it's not
حتى رأيت مثالfractalf ، وأدركت أن كل هذا حدث فقط للمواقع المستضافة على IIS6 مع https

لا حظ.

لم يكن وضع الأصفار للمتابعة مجديًا بالنسبة لي.
خيارات الوكيل: {
الأصفار: "DES-CBC3-SHA"
}

aganapan ما هو عنوان url الذي كنت تطلبه؟ سيصلح الحل الخاص بي فقط المشكلات المتعلقة باستضافة موقع الويب على IIS6 + TLS1.0. قد تكون هناك مشكلات أخرى تؤدي إلى خطأ مماثل في msg.

كان لي نفس المشكلة. لقد استخدمت ngrok ونظرت في طلب RAW. اتضح أنه كان هناك حرف e2808b غير قابل للطباعة ملحق بإدخال المستخدم. على الأرجح نسخ / لصق. لقد استخدمت encodeURIComponent() على ذلك المستخدم الذي قدم جزء URI واختفت المشكلة.

كان لي نفس المشكلة.

  • العقدة V6.9.5
  • طلب V2.69.0

danielkhan لقد استخدمت طريقة encodeURIComponent ؛

// this is request
{
    "request": {
        "debugId": 5,
        "uri": "https://xxx.cdn.cn/js/information_main_27d1838a.js",
        "method": "GET",
        "headers": {
            "user-agent": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
            "host": "xxx.cdn.cn"
        }
    }
}

{
    "response": {
        "debugId": 5,
        "headers": {
            "expires": "Sat, 15 Apr 2017 11:01:16 GMT",
            "date": "Thu, 16 Mar 2017 11:01:16 GMT",
            "content-type": "application/x-javascript; charset=utf-8",
            "content-length": "49785",
            "last-modified": "Sun, 12 Mar 2017 14:30:49 GMT",
            "cache-control": "max-age=2592000",
            "access-control-allow-origin": "*",
            "accept-ranges": "bytes",
            "age": "19",
            "x-cache": "HIT from www.matocloud.com",
            "connection": "close",
            "alt-svc": "h2=\":443\""
        },
        "statusCode": 200
    }
}

Node.js 6.10.0
طلب 2.72.0

وجدنا نفس المشكلة أثناء تشغيل بعض اختبارات التكامل الخلفية. يتصل منتجنا بالعديد من أجهزة الشبكة باستخدام HTTPS. في هذا السيناريو ، نقوم بإنشاء عدة اتصالات HTTPS وتنفيذ بعض طلبات POST و GET لكل جهاز.
نظرًا لحدوث المشكلة في بيئة الاختبار الخاصة بنا ، كان الحل البديل هو تعطيل اتصالات HTTP المستمرة (قم بتعيين رأس HTTP Connection: close ). من خلال القيام بذلك ، نطلب من الخادم إغلاق الاتصال بعد تسليم الاستجابة (HTTP / 1.1). ومع ذلك ، فإننا نفقد مزايا اتصالات HTTP المستمرة لأن كل TCP يخدم الآن طلبًا واحدًا فقط.

يحظر chrome هذا الحل DES-CBC3-SHA

بالنسبة لي ، الضفيرة لا تعمل. لقد وجدت أنني قمت بتعيين الوكيل لأداة سطر الأوامر الخاصة بي من قبل. يعمل بشكل جيد الآن عندما أقوم بإزالة الوكيل.

ما زلت أتلقى هذه المشكلة.

{ Error: socket hang up
 at createHangUpError (_http_client.js:302:15)
 at Socket.socketOnEnd (_http_client.js:394:23)
 at emitNone (events.js:91:20)
 at Socket.emit (events.js:186:7)
 at endReadableNT (_stream_readable.js:974:12)
 at _combinedTickCallback (internal/process/next_tick.js:74:11)
 at process._tickDomainCallback (internal/process/next_tick.js:122:9) code: 'ECONNRESET' }

أخيرًا حصلت على هذا للعمل من أجل recaptcha. اضطررت إلى استيراد واستخدام مكتبة https. هنا كود العمل:

var https = يتطلب ('https') ؛
var querystring = يتطلب ('querystring') ؛

var secret = "YOUR_KEY" ؛
استجابة var = RESPONSE_CODE ،
var postData = "secret =" + secret + "&" + "response =" + response ؛

// إنشاء سلسلة المشاركة من كائن
var post_data = querystring.stringify ({
"compilation_level": "ADVANCED_OPTIMIZATIONS"،
'output_format': 'json'،
'output_info': 'compiled_code'،
"warning_level": "QUIET"،
"js_code": postData
}) ؛

خيارات var = {
اسم المضيف: " www.google.com " ،
المنفذ: 443 ،
المسار: '/ recaptcha / api / siteverify' ،
الطريقة: "POST" ،
الرؤوس: {
"نوع المحتوى": "application / x-www-form-urlencoded"
// "ترميز المحتوى": "gzip" ،
// "اتصال": "إغلاق"
} ،
خيارات الوكيل: {
الأصفار: "DES-CBC3-SHA"
}
} ؛
var req = https.request (options، function (res) {
console.log ('الحالة:' + res.statusCode) ؛
console.log ('Headers:' + JSON.stringify (res.headers)) ؛
res.setEncoding ('utf8') ؛
res.on ("البيانات" ، الوظيفة (الجسم) {
console.log ('Body:' + body) ؛
}) ؛
}) ؛
req.on ("خطأ" ، الوظيفة (هـ) {
console.log ('مشكلة في الطلب:' + e.message) ؛
}) ؛
// كتابة البيانات لطلب الجسم
req.write (postData) ؛
req.end () ؛

ملاحظة: تسجيل هذا للآخرين الذين من المحتمل أن يتعثروا في هذه المناقشة عند البحث في الإنترنت عن رسالة الخطأ هذه.

كما اتضح أن معظم المناقشة أعلاه قد فاتت النقطة ، لأن الخطأ ليس ناتجًا عن موقع العميل ، وبالتالي فإن تجربة "الحلول" المختلفة لـ request لن تنجح على الأرجح. تكمن المشكلة في أن مأخذ توصيل طلب HTTP على جانب الخادم يعمل في مهلة الخمول ، بسبب التأخير الطويل في عملية الخلفية ، ثم يغلق المقبس. ينتج عن ذلك ECONNRESET من جانب العميل.

إذا كنت مسؤولاً أيضًا عن الكود المصدري من جانب الخادم واستخدمت إطار عمل express / koa ، فيجب عليك تعطيل مهلة الخمول على مقبس طلب HTTP قبل بدء عملية الواجهة الخلفية طويلة الأمد. على سبيل المثال لمعالج التوجيه ES6 koa:

javascript ctx => { .... ctx.socket.setTimeout(0); // now trigger the long lasting backend operation .... }

الآن اختفت مشكلة مهلة العميل الخاصة بي دون تغيير أي سطر في رمز العميل ...

تأكد من أنك تطلب عنوان url باستخدام SSL الصحيح - إما https أو http

إنها أيضًا مشكلة الوكيل في حالتي. بعد إعادة تعيين http_proxy و https_proxy ، اختفت المشكلة.

كان لي نفس القضية.

لتجعيد الشعر:
HTTP/1.1 200 OK

بالنسبة إلى وحدة HTTP الأصلية:
{ [Error: socket hang up] code: 'ECONNRESET' }

لوحدة الطلب:
{ [Error: socket hang up] code: 'ECONNRESET' }

كان السبب في الرد ، لا سيما في التركيب الخاطئ لبروتوكول http.
كان الرمز \n بعد كل رأس ، ولكن يجب أن يكون \r\n ، وبعد العنوان الأخير - \r\n\r\n .

عندما تم إصلاحه ، اختفى الخطأ.

قد تكون مفيدة وتوفر الوقت لشخص ما.

كان لي نفس المشكلة. في حالتي ، قمت بتعيين User-Agent في رؤوس في خيارات الطلب وذهبت المشكلة.

تواجه نفس المشكلة مع العقدة 8.x

+1
العقدة 8.1.2
"الطلب": "= 2.81.0"

{
    "method": "GET",
    "json": true,
    "uri": "http://www.bb.com/xxxxxxxxxxx",
    "baseUrl": null,
    "headers": {
        "cookie": "yyyyy",
        "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60"
    },
    "qs": {
        "app_version": "1.9.8.8",
        "env": "prod"
    }
}

//res
Error: socket hang up
InternalServerError: Internal Server Error

// setting
var _request = require('request').defaults({
        forever      : true,
        maxRedirects : 8
    }),

لقد حصلت على نفس الخطأ ، ولكن بشكل مختلف قليلاً ، وضعي مثل هذا.
testapp -> api A -> api B.
-> يعني الطلب
اختبار التطبيق احصل على خطأ قطع الاتصال عندما طلب A B ببطء شديد وأخيراً حصل على خطأ 500 من B (يتم معالجة الخطأ في api A).
أنا متأكد من أنها ليست مشكلة تتعلق بالمهلة ، لأن api A يقوم بالكثير من الأشياء ويعيد الاستجابة دائمًا ببطء شديد ، ولكن لا يوجد خطأ.
أنا الآن في حيرة من أمري حول كيفية عمل الصريح والطلب ، يتم التعامل مع الخطأ 500 بالفعل بواسطة api A ولديه إجراءات أخرى لمتابعة. لماذا سيظل تطبيق الاختبار يحصل على خطأ في تعليق المقبس؟

أواجه هذه المشكلة أيضًا في أحدث عقدة (8.6) بالإضافة إلى أحدث إصدار 7.x. التفاصيل هنا إذا كان أي شخص يريد أن يأخذ طعنة فيه: https://stackoverflow.com/questions/46666079/node-js-http-get-econnreset-error-on-read

يُرجى إعلامي إذا كان بإمكاني تقديم أي معلومات إضافية!

تواجه نفس المشكلة مع Node 6.10.0

تفسير آخر محتمل: أنت ترسل بيانات في نص HTTP أكثر مما هو محدد في رأس طول المحتوى

+1
العقدة 8.6.0

لإصلاح المشكلة ، يجب عليك:
1-إضافة process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ؛
2-قم بترقية zone.js إلى الإصدار 0.7.4

واجهت نفس المشكلة وكان الحل هو استخدام متغير البيئة NO_PROXY = "yourcompany.com" بالإضافة إلى rictSSL: false ، حيث تم تقديم طلبنا إلى عنوان url الداخلي للشركة وكان يحاول استخدام خادم وكيل. يمكنك استخدام process.env.NO_PROXY = "yourcompany.com" برمجيًا.

+1
العقدة 8.8.1

at createHangUpError (_http_client.js:329:15)
at Socket.socketOnEnd (_http_client.js:421:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1056:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9) code: 'ECONNRESET' }

يبدو أن المشكلة من طرفي كانت أن Vagrant كان "يحتل" المنفذ ويرسل حزمة TCP بعلامة FIN مباشرة بعد طلبي GET على الرغم من أنه لا يزال من غير الواضح سبب عدم وجود مشكلة في Chrome و ساعي البريد العمل حول هذا - ربما لديهم بعض المرونة الإضافية

كانت لدي هذه المشكلة ، كان GZIP قيد التشغيل ، وكان Keep على قيد الحياة أيضًا.
اختفت المشكلة بعد إضافة الحزم.

const zlib = require('zlib'); // for GZIP
const http = require('http');
const https = require('https');

نفس المشكلة - تم إصلاحها عن طريق تغيير عنوان URL من المضيف المحلي إلى IP الفعلي للجهاز المضيف فقط لمعلوماتك

لا تزال تواجه هذه المشكلة .... لا يوجد سبب واضح.

info:  Error: socket hang up
    at createHangUpError (_http_client.js:345:15)
    at Socket.socketOnEnd (_http_client.js:437:23)
    at emitNone (events.js:110:20)
    at Socket.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

مرحبًا , لا أعرف ما إذا كنت قد قمت بحل هذه المشكلة بعد , لكنني قمت بحل هذا الأمر ، عندما أقوم بتصحيح الأخطاء ، أجد ،

// Using native http
let postData = querystring.stringify(data);
...
req.write(postData);

إذا كان الخادم البعيد يبدأ بواسطة koa (أو خادم nodejs آخر) ، وكانت البيانات {} ، فإن postData بواسطة وظيفة Stringify تتحول إلى {} ، لكن خادم koa يحصل سيؤدي {} إلى طرح parser error ، لذا سيظهر هذا الطلب خطأ بحلول

Error: socket hang up
    at createHangUpError (_http_client.js:345:15)
    at Socket.socketOnEnd (_http_client.js:437:23)
    at emitNone (events.js:110:20)
    at Socket.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

لذلك فعلت هذا: __postData = postData === '{}'؟ '' : أرسل البيانات__

آمل أن يساعدك

بالنسبة لي ، يحدث هذا أثناء إرسال طلب POST مع content-length : 0 في رؤوس الطلب. لا أعرف ما إذا كانت هذه النتيجة معقولة ، ولكن على الأقل أعتقد أنه يمكنك محاولة إزالة كل عنصر في الرؤوس التي أضفتها لمعرفة سبب المشكلة.

عندما أقوم بتغيير "GET" إلى "POST" ، قم بإصلاحها. لكن لا أعرف السبب ، لقد أصلحه من https://cnodejs.org/topic/57a6c35282e6ea4870ecd3f2 ، قال أحدهم إذا كنت تستخدم "GET" ، فلن يتمكن الكود من تشغيل res.on('data', cb)

LvChengbin كنت أيضًا أواجه نفس المشكلة عند طلب POST . عمل استبدال Content-Length : 0 بالطول الفعلي للجسم بالنسبة لي.

شخص ما ينقذني: الملاك:

لدي أيضًا نفس المشكلة في bode v.8.9

{خطأ: مأخذ قطع الاتصال
في createHangUpError (_http_client.js: 331: 15)
في Socket.socketOnEnd (_http_client.js: 423: 23)
في emitNone (events.js: 111: 20)
في Socket.emit (events.js: 208: 7)
في endReadableNT (_stream_readable.js: 1064: 12)
في _combinedTickCallback (داخلي / عملية / next_tick.js: 138: 11)
في process._tickCallback (داخلي / عملية / next_tick.js: 180: 9) الكود: "ECONNR
ESET "}

الكود الخاص بي أدناه.

اسمح للطلب = يتطلب ("طلب") ؛
طلب({
url: " http://192.168.31.29 : 3019 / التكتيكات / createMediaHotTotal20"،
الطريقة: "GET" ،
json: صحيح ،
الرؤوس: {
"نوع المحتوى": "application / json"
} ،
} ، الوظيفة (خطأ ، استجابة ، جسم) {
إذا (خطأ) {
console.log (خطأ)
} آخر {
حل (الجسم) ؛
}
})

نفس المشكلة ، العقدة v9.5.0

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

process.env.NO_PROXY="yourcompany.com";

const options = {
  hostname: "en.wikipedia.org",
  port: 443,
  path: "/wiki/George_Washingtons",
  method: "POST",
  // ciphers: 'DES-CBC3-SHA'
};

const req = https.request(options, (res) => {
  let responseBody = "";
  console.log("Response started");
  console.log(`Server Status: ${res.statusCode} `);
  console.log(res.headers);
  res.setEncoding("UTF-8");

  res.once("data", (chunk) => {
    console.log(chunk);
  });

  res.on("data", (chunk) => {
    console.log(`--chunk-- ${chunk.length}`);
    responseBody += chunk;
  });

  res.on("end", () => {
    fs.writeFile("gw.html", responseBody, (err) => {
      if (err) throw err;
      console.log("Downloaded file");
    });
  });
});

req.on("error", (err) => {
  console.log("Request problem", err);
});
Request problem { Error: socket hang up
    at createHangUpError (_http_client.js:330:15)
    at TLSSocket.socketOnEnd (_http_client.js:423:23)
    at TLSSocket.emit (events.js:165:20)
    at endReadableNT (_stream_readable.js:1101:12)
    at process._tickCallback (internal/process/next_tick.js:152:19) code: 'ECONNRESET' }



md5-988987fef0feed585119ccc2fe5450ba



~/node-training> npm config ls -l
; cli configs
long = true
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.1.0 node/v9.5.0 darwin x64"

; userconfig /Users/katsanos/.npmrc
strict-ssl = false

; default values
access = null
allow-same-version = false
also = null
always-auth = false
audit = true
auth-type = "legacy"
bin-links = true
browser = null
ca = null
cache = "/Users/katsanos/.npm"
cache-lock-retries = 10
cache-lock-stale = 60000
cache-lock-wait = 10000
cache-max = null
cache-min = 10
cafile = undefined
cert = null
cidr = null
color = true
commit-hooks = true
depth = null
description = true
dev = false
dry-run = false
editor = "vi"
engine-strict = false
fetch-retries = 2
fetch-retry-factor = 10
fetch-retry-maxtimeout = 60000
fetch-retry-mintimeout = 10000
force = false
git = "git"
git-tag-version = true
global = false
global-style = false
globalconfig = "/usr/local/etc/npmrc"
globalignorefile = "/usr/local/etc/npmignore"
group = 1493692218
ham-it-up = false
heading = "npm"
https-proxy = null
if-present = false
ignore-prepublish = false
ignore-scripts = false
init-author-email = ""
init-author-name = ""
init-author-url = ""
init-license = "ISC"
init-module = "/Users/katsanos/.npm-init.js"
init-version = "1.0.0"
json = false
key = null
legacy-bundling = false
link = false
local-address = undefined
loglevel = "notice"
logs-max = 10
; long = false (overridden)
maxsockets = 50
message = "%s"
; metrics-registry = null (overridden)
no-proxy = null
node-options = null
node-version = "9.5.0"
offline = false
onload-script = null
only = null
optional = true
otp = null
package-lock = true
package-lock-only = false
parseable = false
prefer-offline = false
prefer-online = false
prefix = "/usr/local"
production = false
progress = true
proxy = null
read-only = false
rebuild-bundle = true
registry = "https://registry.npmjs.org/"
rollback = true
save = true
save-bundle = false
save-dev = false
save-exact = false
save-optional = false
save-prefix = "^"
save-prod = false
scope = ""
script-shell = null
scripts-prepend-node-path = "warn-only"
searchexclude = null
searchlimit = 20
searchopts = ""
searchstaleness = 900
send-metrics = false
shell = "/usr/local/bin/fish"
shrinkwrap = true
sign-git-tag = false
sso-poll-frequency = 500
sso-type = "oauth"
; strict-ssl = true (overridden)
tag = "latest"
tag-version-prefix = "v"
timing = false
tmp = "/var/folders/kn/3cnpbcsx60n4fx_jv6sf4l80_mdkps/T"
umask = 18
unicode = true
unsafe-perm = true
usage = false
user = 356960985
; user-agent = "npm/{npm-version} node/{node-version} {platform} {arch}" (overridden)
userconfig = "/Users/katsanos/.npmrc"
version = false
versions = false
viewer = "man"

تحرير : كنت أفتقد req.end() . يعمل

لدي نفس الخطأ. يعمل POST عند إضافة طول المحتوى إلى الطلب. آمل أن يساعد هذا يا رفاق:
"طول المحتوى": Buffer.byteLength (بيانات) // طول المحتوى مطلوب لوظيفة POST

في حالتي ، تمكنت من حل المشكلة عن طريق تعيين رأس Connection: keep-alive .

احفظ يومي!

احفرها قليلا
لدي مشكلة خلفية مرة واحدة في الأسبوع مع الطلب عند إرسال POST إلى خادم nodejs.
بعد الذهاب إلى dipper ، وجدت أن nodejs تقوم فقط بتعليق الاتصال إذا كان الطلب مشوهًا.

يبدو أن بعض الأخطاء الخلفية تحدث عند تمرير طلب POST إلى http.request

في حالتي ، تم إرسال الجسم بدون الرموز الأخيرة وربما كان ذلك بسبب سوء تقدير طول المحتوى في setContentLength()

يؤدي استخدام "http" بدلاً من بروتوكول "https" إلى حل المشكلة أيضًا.

هذا محبط للغاية. ليس لدي سيطرة على الخادم ولكن لا يمكنني القيام بـ POST من Nodejs (باستخدام الطلب أو الوكيل الفائق) ، ولكن يمكنني إجراء curl أو Postman بنجاح. والأكثر جنونًا ، أن المكالمة ستنجح إذا توقفت مؤقتًا عن استخدام مصحح الأخطاء في بيان الطلب ، واستمرت.

في حالتي ، أزلت للتو رأس "المضيف" ، وتم حلها.

واجهتنا هذه المشكلة بعد الترقية إلى nodejs أحدث ( 10.16.3 ). من جانب العميل ، استخدمنا وكيل nodejs http مع keepAlive: true . يبدو أن ما يلي قد حدث:

  • يستخدم العميل مقبسًا مجانيًا للقيام بطلب
  • في نفس الوقت يغلق الخادم المقبس بسبب إعداد keepAliveTimeout الذي ظهر في الإصدار 8 من nodejs

المحلول
حتى الآن وجدنا حلين:
1) من جانب الخادم ، قم بتعطيل keepAliveTimeout خلال جعله يساوي 0
2) أغلق المآخذ المجانية بأقل من keepAliveTimeout value (افتراضيًا 5 ثوانٍ). وكيل http الافتراضي لا يدعم مثل هذه الإمكانية ( timeout الإعداد لا يفعل ذلك). لذلك استخدمنا Agentkeepalive lib

const HttpsAgent = require('agentkeepalive').HttpsAgent;

const agent = new HttpsAgent({
    freeSocketTimeout: 4000
});
let req = http.get(options, (res) => {
    ...........
    ...........
}).on('error', function(e) {
        console.error(e);
});

جرب هذا.

نواجه مشكلة مماثلة - حاليًا ، نستخدم الإصدار 6.11.x لكننا جربنا العقدة 10 ولكن لا يساعدنا.

لقد حاولنا حتى ترقية وحدة الطلب + إضافة جميع الاقتراحات المقدمة ولكن دون مساعدة.

أي أفكار أخرى أو مساعدة في استكشاف الأخطاء وإصلاحها.

نحن قادرون على حل هذه المشكلة - كان لبوابة API الخاصة بنا إعداد مهلة تسبب في حدوث هذه المشكلة. أشكرك للنظر فيها.

نحن قادرون على حل هذه المشكلة - كان لبوابة API الخاصة بنا إعداد مهلة تسبب في حدوث هذه المشكلة. أشكرك للنظر فيها.

مرحبًا ، هل يمكن أن تخبرني ما هو نوع إعداد المهلة الذي يؤدي إلى هذه المشكلة

لدي نفس المشكلة عندما أختبر طرقاتي باستخدام chai-http. العبث أن أول ثلاث تمريرات جيدة !! أحاول مواجهته طوال اليوم

هنا الكود الخاص بي:
""
سجل ("اختبار العمل")
("اختبار / مسارات تسجيل الدخول" ، تم => {
تشاي
.request (الخادم)
.post ("/ تسجيل الدخول")
.إرسال({ })
.end (الوظيفة (يخطئ ، الدقة) {
توقع (يخطئ) .to.be.null ؛
توقع (حالة الدقة). حتى لا يساوي (404) ؛
توقع (res.body.message) .to.not.be.equal ("غير موجود") ؛
فعله()؛
}) ؛
}) ؛

سجل (فشل اختبار مع خطأ: قطع مأخذ التوصيل)
it ('test the / getResetCodePassword route'، (done) => {
تشاي
.request (الخادم)
.patch ("/ getResetCodePassword")
.إرسال({ })
.end ((يخطئ ، الدقة) => {
console.log (يخطئ) ؛
فعله()؛
})
})

""

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات