Request: Kesalahan: soket ditutup

Dibuat pada 31 Jan 2016  ·  77Komentar  ·  Sumber: request/request

Hai, saya tahu bahwa masalah seperti itu telah dibuat sebelumnya, tetapi ada deskripsi yang sedikit berbeda.

Saya mencoba melakukan permintaan sederhana: kirim data formulir. Tetapi ketika saya menggunakan modul permintaan, selalu muncul "socket hang up".

Di bawah kasus uji sederhana dan hasil

'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();

Untuk modul permintaan:

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

Untuk http asli:

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.

Sepertinya itu benar-benar bug dalam modul permintaan.

Not enough info (see CONTRIBUTING.md)

Komentar yang paling membantu

Seseorang selamatkan aku :malaikat:

Semua 77 komentar

Saya memiliki masalah yang sama, tetapi opsi tambahkan gzip:true akan berfungsi.

Versi node.js apa yang Anda gunakan? Kami melihat pengecualian ECONNRESET sesekali setelah memutakhirkan dari 0,10 ke 0,12. Dari menggali bug node.js sepertinya ini mungkin telah rusak di 0.12 dan diperbaiki setelahnya.

Masalah yang sama di sini. Ada pembaruan? Saya menggunakan node.js 4.2.2 dan saya mendapatkan kesalahan ECONNRESET berkala (3-4 kali per menit).

Hai @aymeba sepertinya versi 4.x pertama yang memiliki perbaikan ini adalah 4.4.0.

Cari komit berjudul http: handle errors on idle sockets . Ada banyak komit yang berbeda dengan judul ini, karena itu diterapkan ke cabang yang berbeda.

Tidak apa-apa, saya menjadi bingung dan berbicara tentang bug ECONNRESET di node.js (#3595).

Saya tidak berpikir itu terjadi karena bug yang Anda tunjuk. Dalam kasus kami, ini muncul:

  • Kirim permintaan ke backend kami
  • Backend memproses permintaan
  • Entah bagaimana permintaan terputus tanpa menunggu respons dan kami mendapatkan ECONNRESET
  • Kami yakin, bahwa server backend kami tidak memutuskan koneksi

Saya bingung mendapatkan kesalahan ini karena dalam kasus biasa, server backend kami harus membuang kesalahan ini atau?

Ada update tentang ini?. Saya melihat kesalahan dengan botkit 0.2.1.

Saya mengalami masalah serupa. Saya telah melakukan berjam-jam penelitian, pengujian, dan debugging. Dalam kasus saya, memposting ke restapi yang sama melalui Postman, titik akhir berfungsi dengan baik. Membuat permintaan melalui panggilan asli NodeJS http.request gagal. Semua header, dan payload (body) adalah sama. (kecuali saya tidak memiliki token tukang pos di header)

Pengungkapan penuh, saya menggunakan restify untuk server saya.

Jika Anda menggunakan restify di sisi server, akan membantu untuk mengaktifkan auditor, yang seharusnya memberikan beberapa petunjuk tentang apa yang sedang terjadi. Juga, pastikan Anda mengatur "Jenis Konten" yang tepat dalam permintaan Anda sehingga server tahu apa yang diharapkan. Saya telah melihat kesalahan ini ketika server salah memahami permintaan, jadi menyediakan tipe konten akan membantu.

Setiap pembaruan tentang masalah ini? Saya masih melihat masalah ini terjadi dengan Node v5.0.0. Saya melihatnya melempar kesalahan tepat setelah 45 detik sejak permintaan dibuat.

Saya telah melihat masalah yang sama dengan HapiJS. Masalahnya adalah header panjang konten yang salah

saya ingin membuat permintaan untuk berlangganan dan pemberitahuan terima kasih ...

terjadi dengan 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
  }

Saya melihat ini juga dengan node 6.6.0. Server yang saya sambungkan tidak mengirimkan tajuk Panjang Konten dalam respons, dalam hal ini menurut spesifikasi HTTP server harus menutup aliran setelah mengirim semua data. Saya menduga ini disalahartikan sebagai soket yang ditutup. Membuat permintaan yang sama dengan cURL berfungsi dengan baik.

+1
simpul 6.9.4
permintaan 2.79.0

Bekerja dengan baik dengan curl
Url yang saya coba dapatkan kembali header Content-Length

+1
simpul 6.9.1
permintaan 2.79.0

Wget, curl - sukses, tapi request - error.

Simpul - v6.9.4
Permintaan - 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' }

Memiliki masalah yang sama. Menariknya tampaknya tidak tergantung pada versi permintaan karena kode yang sama berfungsi untuk saya di 6.4.0, tetapi rusak di 6.9.2 (ini hanya 2 versi nodejs yang kebetulan telah saya instal).

Dalam kasus saya, saya dapat mengatasi masalah dengan mengatur header Connection: keep-alive .

@dieseldjango Terima kasih atas sarannya. Tidak menyelesaikan kasus saya sekalipun.

Berikut adalah situs yang memberikan kesalahan ini, untuk reproduksi:

{ 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)

..menggunakan request-debug untuk

Ini belum terselesaikan? Itu berfungsi dengan baik seperti dua minggu yang lalu dan sekarang saya mendapatkan kesalahan ini
{ [Error: socket hang up] code: 'ECONNRESET', response: undefined }
simpul -v 4.4.7

coba hapus 'accept-encoding': 'gzip, deflate' di header selesaikan ini.

Saya melihat orang-orang mendapatkan kesalahan ini lebih sering. Dalam kasus saya itu sangat sederhana. Apa yang saya pikir adalah URL yang dibentuk dengan benar berdasarkan salah satu algoritme saya, sebenarnya salah format. Saya mendorong Anda semua yang mengalami masalah ini untuk menganggap masalahnya ada pada kode Anda. Saya yakinkan Anda, dalam 98% kasus, akar masalahnya adalah sesuatu yang biasa Anda anggap remeh atau diabaikan. Saya telah mencoba semua hal di atas untuk menyelesaikan masalah, tetapi pada akhirnya, itu menghasilkan garis miring ekstra.

Saya mencoba mengikuti semua saran yang Anda katakan, tetapi masalah ini masih terjadi. sangat sedih....

Jika itu membantu siapa pun, saya akhirnya mengatasi masalah ini dengan menggunakan require('child_process').exec untuk memanggil curl. Pastikan Anda membersihkan input Anda dengan benar jika berasal dari userland.

Silakan coba request ke google.com => hostname: 'google.com' untuk memeriksa apakah berfungsi atau tidak.
Dalam kasus saya, "hostname" ditangani oleh nginx sebagai proxy dan tidak merespons saat menerima permintaan dengan badan kosong.
Kode ini mendapatkan kesalahan:

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();

Kode ini berfungsi

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
simpul 6.9.5

Halo Guys, Saya memiliki masalah yang sama. +1
Untungnya saya menggunakan 'permintaan' dalam alat pemantauan ke-2 sehingga masalah saya minimal. Saya sangat menyukai node.js, jadi saya memposting beberapa umpan balik. Saya harap umpan balik saya sedikit membantu dengan upaya Anda untuk memperbaiki masalah ini.

Kesalahan sekarang muncul secara konsisten di lingkungan produksi lalu lintas tinggi.
Saya dapat memutar replika server yang "tepat" dan kesalahan "tidak pernah" muncul. Saya dapat mengganti titik akhir, dan selalu berakhir dengan lingkungan produksi lalu lintas tinggi yang menyebabkan kesalahan ini untuk klien.
{ [Error: socket hang up] kode: 'ECONNRESET' }.

Ini dimulai sebagai kesalahan intermiten yang saya perhatikan beberapa hari yang lalu dan setelah layanan pemantauan terlalu sering salah ..... dan banyak kali pengujian dengan alat uji produksi yang tidak menggunakan 'permintaan' saya mulai mencari di web untuk menemukan masalah ini di sini.

Sekarang saya belum mengubah kode/versi apa pun selama lebih dari 8 bulan untuk aplikasi ini dan saya bingung bagaimana ini bisa terjadi entah dari mana. Jadi... apa yang berubah di dunia 'permintaan' jika saya tidak mengubah kode klien?

+1
simpul 6.9.1

Ini hanya terjadi sesekali, ketika saya menguji titik akhir saya secara lokal, menjalankan banyak permintaan dengan cara yang agak cepat...

Kami juga menghadapi masalah yang sama dengan node4 dan node6. bekerja dengan baik dengan node0.12.

Mohon bantuannya untuk memperbaiki ini.

masalah serupa dalam masalah https.request asli
lihat selengkapnya di sini ,

tambahkan di bawah ini untuk meminta opsi akan melewati (memperbaiki) masalah ini,

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

saya terjebak dan menghabiskan sepanjang sore mencoba mencari tahu... berada di lingkungan yang rumit dengan beberapa lapisan pengalihan: is this DNS issue? -> no way it's DNS -> definitely DNS -> no it's not
sampai saya melihat contoh @fractalf , dan menyadari bahwa semua ini hanya terjadi pada situs yang dihosting di IIS6 dengan https

Tidak beruntung.

pengaturan cipher untuk mengikuti tidak berhasil untuk saya.
opsi agen: {
sandi: 'DES-CBC3-SHA'
}

@aganapan apa url yang Anda minta? Solusi saya hanya akan memperbaiki masalah yang terkait dengan hosting situs web di IIS6 + TLS1.0. Mungkin ada masalah lain yang menghasilkan pesan kesalahan serupa.

Saya memiliki masalah yang sama. Saya menggunakan ngrok dan melihat permintaan RAW. Ternyata ada karakter e2808b yang tidak dapat dicetak yang ditambahkan ke input pengguna. Kemungkinan besar salin/tempel. Saya menggunakan encodeURIComponent() pada bagian URI yang disediakan pengguna dan masalahnya hilang.

Saya memiliki masalah yang sama.

  • simpul V6.9.5
  • permintaan V2.69.0

@danielkhan Saya telah menggunakan metode 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
permintaan 2.72.0

Kami menemukan masalah yang sama saat menjalankan beberapa tes integrasi backend. Produk kami terhubung ke beberapa perangkat jaringan menggunakan HTTPS. Dalam skenario ini, kami membuat beberapa koneksi HTTPS dan menjalankan beberapa permintaan POST dan GET ke setiap perangkat.
Karena masalah terjadi di lingkungan pengujian kami, solusinya adalah menonaktifkan koneksi persisten HTTP (setel header HTTP Connection: close ). Dengan melakukan ini, kami meminta server untuk menutup koneksi setelah memberikan respons (HTTP/1.1). Namun, kami kehilangan manfaat dari koneksi persisten HTTP karena sekarang setiap TCP hanya akan melayani satu permintaan.

chrome memblokir solusi DES-CBC3-SHA

Bagi saya, curl tidak berfungsi. Saya menemukan saya telah mengatur proxy ke alat baris perintah saya sebelumnya. Ini berfungsi dengan baik sekarang ketika saya menghapus proxy.

Saya masih mendapatkan masalah ini.

{ 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' }

Akhirnya ini berfungsi untuk recaptcha. Saya harus mengimpor dan menggunakan perpustakaan https. Berikut adalah kode kerja:

var https = membutuhkan('https');
var querystring = membutuhkan('string');

var rahasia = "KUNCI_ANDA";
var respon = RESPONSE_CODE;
var postData = "secret="+secret+"&"+"response="+respons;

// Membangun string posting dari sebuah objek
var post_data = querystring.stringify({
'tingkat_kompilasi' : 'ADVANCED_OPTIMIZATIONS',
'output_format': 'json',
'output_info': 'compiled_code',
'warning_level' : 'QUIET',
'js_code' : postData
});

opsi var = {
nama host: ' www.google.com ',
pelabuhan: 443,
jalur: '/recaptcha/api/siteverify',
metode: 'POST',
header: {
'Jenis Konten': 'application/x-www-form-urlencoded'
//'pengkodean konten': 'gzip',
//'Koneksi': 'tutup'
},
opsi agen: {
sandi: 'DES-CBC3-SHA'
}
};
var req = https.request(options, function(res) {
console.log('Status: ' + res.statusCode);
console.log('Header: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', fungsi (tubuh) {
console.log('Tubuh: ' + badan);
});
});
req.on('kesalahan', fungsi(e) {
console.log('masalah dengan permintaan: ' + e.message);
});
// tulis data ke badan permintaan
req.write(postData);
req.end();

CATATAN: merekam ini untuk orang lain yang mungkin akan tersandung pada diskusi ini ketika mencari di internet untuk pesan kesalahan tertentu.

Ternyata sebagian besar diskusi di atas tidak tepat sasaran, karena kesalahan tidak disebabkan oleh situs klien dan karenanya mencoba "solusi" yang berbeda untuk request kemungkinan besar tidak akan berhasil. Masalahnya adalah bahwa soket permintaan HTTP di sisi server mengalami batas waktu idle, karena penundaan yang lama dalam operasi latar belakang, dan kemudian menutup soket. Itu menghasilkan ECONNRESET di sisi klien.

Jika Anda juga bertanggung jawab atas kode sumber sisi server dan menggunakan kerangka kerja express/koa maka Anda harus menonaktifkan batas waktu idle pada soket permintaan HTTP sebelum memulai operasi backend yang tahan lama. Misalnya untuk penangan rute koa ES6:

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

Sekarang masalah batas waktu klien saya hilang tanpa mengubah baris apa pun dalam kode klien ...

pastikan Anda memanggil url dengan SSL yang tepat - baik https atau http

Ini juga masalah proxy dalam kasus saya. Setelah mengatur ulang http_proxy dan https_proxy, masalahnya hilang.

Saya memiliki masalah yang sama.

Untuk ikal:
HTTP/1.1 200 OK

Untuk modul http asli:
{ [Error: socket hang up] code: 'ECONNRESET' }

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

Alasannya adalah sebagai tanggapan, terutama dalam sintaks protokol http yang salah.
\n simbol setelah setiap header, tetapi harus \r\n , dan setelah header terakhir - \r\n\r\n .

Ketika diperbaiki, kesalahan itu hilang.

Mungkin itu akan berguna dan menghemat waktu untuk seseorang.

Saya memiliki masalah yang sama. Dalam kasus saya, saya mengatur Agen-Pengguna di header dalam opsi permintaan dan masalah hilang.

Memiliki masalah yang sama dengan Node 8.x

+1
simpul 8.1.2
"permintaan": "=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
    }),

Saya mendapat kesalahan yang sama, tetapi sedikit berbeda, situasi saya seperti ini.
testapp -> api A -> api B
-> berarti permintaan
aplikasi uji mendapatkan kesalahan hang up ketika A meminta B sangat lambat dan akhirnya mendapatkan kesalahan 500 dari B (kesalahan ditangani di api A).
Saya yakin ini bukan masalah waktu habis, karena api A melakukan banyak hal dan selalu mengembalikan respons dengan sangat lambat, tetapi tidak ada kesalahan.
Sekarang saya benar-benar bingung bagaimana cara kerja ekspres dan permintaan, kesalahan 500 sudah ditangani oleh api A dan memiliki tindakan lain yang ditindaklanjuti. mengapa aplikasi pengujian masih mendapatkan kesalahan soket hang up?

Saya juga mengalami masalah ini di node terbaru (8.6) serta dengan rilis 7.x terbaru. Detailnya ada di sini jika ada yang ingin mencobanya: https://stackoverflow.com/questions/46666079/node-js-http-get-econnreset-error-on-read

Tolong beri tahu saya jika saya dapat memberikan informasi tambahan!

Memiliki masalah yang sama dengan Node 6.10.0

Penjelasan lain yang mungkin: Anda mengirim lebih banyak data di badan HTTP daripada yang ditentukan di header Panjang Konten

+1
simpul 8.6.0

Untuk memperbaiki masalah, Anda harus:
1-Tambahkan process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
2-Tingkatkan zone.js ke v0.7.4

Saya memiliki masalah yang sama dan resolusinya adalah menggunakan variabel lingkungan NO_PROXY="perusahaananda.com" serta strictSSL:false , karena permintaan kami dibuat ke url internal perusahaan dan mencoba menggunakan server proxy. Anda dapat menggunakan process.env.NO_PROXY="perusahaananda.com" secara terprogram.

+1
simpul 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' }

muncul masalah di pihak saya adalah bahwa Vagrant "menempati" port dan mengirim paket TCP dengan flag FIN segera setelah permintaan GET meskipun masih belum jelas mengapa chrome dan tukang pos tidak punya masalah mengatasi ini - mungkin mereka memiliki ketahanan tambahan

Saya mengalami masalah ini, GZIP aktif, Tetap hidup juga.
Masalahnya hilang setelah menambahkan paket.

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

Masalah yang sama - diperbaiki dengan mengubah URL dari localhost ke IP sebenarnya dari mesin Host hanya sebagai FYI

Masih mengalami masalah ini.... Tidak ada alasan yang jelas.

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)

hai, Saya tidak tahu apakah Anda memecahkan masalah ini, tetapi saya telah memecahkan mainan ini, ketika saya men-debug, saya menemukan,

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

jika server jarak jauh Anda dimulai oleh koa(atau server nodejs lain), dan datanya adalah {} , fungsi postData by stringify berubah menjadi {} , tetapi server koa mendapatkan {} akan melempar parser error , jadi permintaan ini akan melempar kesalahan dengan

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)

jadi saya harus melakukan ini : __postData = postData === '{}' ? '' : postData__

semoga bisa membantu anda

Bagi saya, ini terjadi saat mengirim permintaan POST dengan content-length : 0 di header permintaan. Saya tidak tahu apakah hasil ini masuk akal, tetapi setidaknya saya pikir mungkin Anda dapat mencoba menghapus setiap item di header yang Anda tambahkan untuk mengetahui alasan masalahnya.

ketika saya mengubah 'GET' menjadi 'POST', perbaiki. tapi tidak tahu mengapa, saya memperbaikinya dari https://cnodejs.org/topic/57a6c35282e6ea4870ecd3f2 , seseorang berkata jika Anda menggunakan 'GET', kode tidak dapat dijalankan res.on('data', cb)

@LvChengbin Saya juga menghadapi masalah yang sama pada permintaan POST . Mengganti Content-Length : 0 dengan panjang badan sebenarnya berhasil untuk saya.

Seseorang selamatkan aku :malaikat:

Saya juga memiliki masalah yang sama di pertanda v.8.9

{ Kesalahan: soket hang up
di createHangUpError (_http_client.js:331:15)
di Socket.socketOnEnd (_http_client.js:423:23)
di emitNone (events.js:111:20)
di Socket.emit (events.js:208:7)
di endReadableNT (_stream_readable.js:1064:12)
di _combinedTickCallback (internal/process/next_tick.js:138:11)
di process._tickCallback (internal/process/next_tick.js:180:9) kode: 'ECONNR
ESET' }

kode saya di bawah ini.

biarkan permintaan=memerlukan("permintaan");
meminta({
url: " http://192.168.31.29 :3019/tactics/createMediaHotTotal20",
metode: "DAPATKAN",
json: benar,
header: {
"tipe konten": "aplikasi/json"
},
}, fungsi (kesalahan, respons, isi) {
jika (kesalahan) {
console.log(kesalahan)
} kalau tidak {
menyelesaikan (tubuh);
}
})

Masalah yang sama, simpul 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"

EDIT : Saya kehilangan req.end() . Pekerjaan

Saya memiliki bug yang sama. POST berfungsi ketika Panjang Konten ditambahkan ke permintaan. Semoga ini bisa membantu kalian:
'Content-Length': Buffer.byteLength(data) //Content-Length diperlukan untuk POST

Dalam kasus saya, saya dapat mengatasi masalah dengan mengatur header Connection: keep-alive .

SIMPAN HARI SAYA!

Saya menggalinya sedikit.
Saya memiliki masalah belakang sekali dalam seminggu dengan permintaan saat mengirim POST ke server nodejs.
Setelah pergi dipper, saya menemukan bahwa nodejs hanya menggantung koneksi jika permintaan salah.

Sepertinya beberapa bug belakang terjadi ketika permintaan POST diteruskan ke http.request

Dalam kasus saya, body dikirim tanpa simbol terakhir dan MUNGKIN itu karena salah perhitungan Content-Length di setContentLength()

Menggunakan protokol 'http' alih-alih 'https' menyelesaikan masalah juga.

Ini sangat membuat frustrasi. Saya tidak memiliki kendali atas server tetapi saya tidak dapat melakukan POST dari Nodejs (menggunakan permintaan atau superagent), tetapi dapat melakukan curl atau Postman dengan sukses. Lebih gila lagi, panggilan akan berhasil jika saya berhenti menggunakan debugger pada pernyataan permintaan, dan melanjutkan.

Dalam kasus saya baru saja menghapus tajuk 'Host', terpecahkan.

Kami mengalami masalah ini setelah memutakhirkan ke nodejs yang lebih baru ( 10.16.3 ). Di sisi klien kami menggunakan agen http nodejs dengan keepAlive: true . Sepertinya hal berikut terjadi:

  • klien menggunakan soket gratis untuk melakukan permintaan
  • pada saat yang sama server menutup soket karena pengaturan keepAliveTimeout yang telah muncul di nodejs versi 8

Larutan
Sejauh ini kami telah menemukan dua solusi:
1) Di sisi server nonaktifkan keepAliveTimeout dengan mengaturnya sama dengan 0
2) Tutup soket gratis dalam waktu kurang dari keepAliveTimeout (secara default 5 detik). Agen http default tidak mendukung kemampuan seperti itu ( pengaturan timeout tidak melakukannya). Jadi kami menggunakan 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);
});

Coba ini.

Kami menghadapi masalah serupa - saat ini, kami menggunakan 6.11.x tetapi kami mencoba node 10 tetapi tidak membantu.

Kami bahkan mencoba memutakhirkan modul permintaan + menambahkan semua saran yang diberikan tetapi tidak membantu.

Ada ide atau bantuan lain dalam pemecahan masalah.

kami dapat mengatasi masalah ini - gateway API kami memiliki pengaturan batas waktu yang menyebabkan masalah ini. Terima kasih telah memeriksanya.

kami dapat mengatasi masalah ini - gateway API kami memiliki pengaturan batas waktu yang menyebabkan masalah ini. Terima kasih telah memeriksanya.

Hai, dapatkah Anda memberi tahu saya pengaturan batas waktu seperti apa yang menyebabkan masalah ini?

saya memiliki masalah yang sama ketika saya menguji rute saya dengan chai-http. absurd adalah bahwa tiga yang pertama lulus ok!! Saya mencoba menghadapinya sepanjang hari

di sini kode saya:
```
log("tes kerja")
it("test rute /login", done => {
chai
.permintaan(server)
.post("/login")
.mengirim({ })
.end(fungsi(err, res) {
berharap(err).to.be.null;
harapkan(res.status).to.not.equal(404);
harapkan(res.body.message).to.not.be.equal("Tidak Ditemukan");
selesai();
});
});

log (tes gagal dengan Kesalahan: soket hang up)
it('test rute /getResetCodePassword', (selesai)=> {
chai
.permintaan(server)
.patch("/getResetCodePassword")
.mengirim({ })
.end( (err,res) => {
console.log(err);
selesai();
})
})

```

Apakah halaman ini membantu?
0 / 5 - 0 peringkat