嗨,我知道以前曾创建过此类问题,但描述有所不同。
我试图执行简单的请求:发送表单数据。 但是当我使用请求模块时,它总是抛出“套接字挂断”。
下面是简单的测试用例和结果
'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.
看起来它确实是请求模块中的错误。
我有同样的问题,但添加选项gzip:true
会起作用。
您使用的是什么版本的 node.js? 从 0.10 升级到 0.12 后,我们偶尔会看到ECONNRESET
异常。 通过挖掘 node.js 错误,看起来这可能已在 0.12 中被破坏并在之后修复。
这里同样的问题。 任何更新 ? 我正在使用 node.js 4.2.2,并且出现周期性(每分钟 3-4 次)ECONNRESET 错误。
嗨@aymeba ,看起来第一个具有此修复程序的 4.x 版本是 4.4.0。
查找标题为http: handle errors on idle sockets
提交。 这个标题有很多不同的提交,因为它被应用于不同的分支。
没关系,我很困惑,正在谈论 node.js (#3595) 中的一个 ECONNRESET 错误。
我认为这不是因为您指出的错误而发生的。在我们的例子中,它出现:
我很困惑得到这个错误,因为在通常情况下,我们的后端服务器应该抛出这个错误还是?
任何关于此的更新? 我看到了 botkit 0.2.1 的错误。
我有一个类似的问题。我已经进行了数小时的研究、测试和调试。在我的情况下,通过 Postman 发布到同一个restapi,端点工作正常。通过本机 NodeJS http.request 调用发出请求失败。所有标头和有效负载(正文)都是相同的。 (除非我在标题中没有邮递员令牌)
完全披露,我正在为我的服务器使用 restify。
如果您在服务器端使用restify,这将有助于启用审计员,这应该提供一些关于正在发生的事情的提示。 此外,请确保您在请求中设置了正确的“Content-Type”,以便服务器知道会发生什么。 当服务器误解请求时,我已经看到此错误,因此提供内容类型会有所帮助。
关于这个问题的任何更新? 我仍然看到 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 中中断(这些只是我碰巧安装的 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)
..使用request-debug调试发送的标头
这还没解决吗? 它像两周前一样工作正常,我现在收到此错误{ [Error: socket hang up] code: 'ECONNRESET', response: undefined }
节点-v 4.4.7
尝试删除标题中的 'accept-encoding': 'gzip, deflate' 解决了这个问题。
我看到人们更频繁地收到此错误。 就我而言,这真的很简单。 我认为是基于我的一种算法的正确格式的 URL,实际上是格式错误的。 我鼓励所有遇到此问题的人假设问题出在您的代码中。 我向你保证,在 98% 的情况下,根本原因是你认为理所当然或忽视的平凡事物。 我已经尝试了以上所有方法来解决问题,但最后,它归结为一个额外的正斜杠。
我尝试遵循您所说的所有建议,但这个问题仍然存在。 好难过....
如果它帮助任何人,我最终通过使用 require('child_process').exec 调用 curl 来解决这个问题。 如果输入来自用户态,请确保正确清理输入。
请尝试向 google.com => hostname: 'google.com' 请求以检查它是否有效。
在我的情况下,“主机名”由 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 相同的问题。 在 node0.12 上工作正常。
请帮助解决这个问题。
没有运气。
将密码设置为以下对我不起作用。
代理选项:{
密码:'DES-CBC3-SHA'
}
@aganapan您请求的网址是什么? 我的解决方案只会解决与 IIS6 + TLS1.0 上的网站托管相关的问题。 可能还有其他问题会导致类似的错误消息。
我有同样的问题。 我使用 ngrok 并查看了 RAW 请求。 原来有一个 e2808b 不可打印字符附加到用户输入。 很可能是复制/粘贴。 我在该用户提供的 URI 部分上使用了encodeURIComponent()
,问题就消失了。
我有同样的问题。
@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
解决方案
对我来说,curl 不起作用。 我发现我之前已经为我的命令行工具设置了代理。 现在当我删除代理时它工作正常。
我仍然遇到这个问题。
{ 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 = require('querystring');
var secret = "YOUR_KEY";
var 响应 = RESPONSE_CODE;
var postData = "secret="+secret+"&"+"response="+response;
// 从对象构建帖子字符串
var post_data = querystring.stringify({
'compilation_level':'ADVANCED_OPTIMIZATIONS',
'输出格式':'json',
'output_info': 'compiled_code',
“警告级别”:“安静”,
'js_code' : postData
});
变量选项 = {
主机名:' www.google.com ',
端口:443,
路径:'/recaptcha/api/siteverify',
方法:'POST',
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”
//'内容编码': 'gzip',
//'连接':'关闭'
},
代理选项:{
密码:'DES-CBC3-SHA'
}
};
var req = https.request(选项,函数(res){
console.log('状态:' + res.statusCode);
console.log('标题:' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('数据',函数(主体){
console.log('正文:' + 正文);
});
});
req.on('错误', function(e) {
console.log('请求问题:' + e.message);
});
// 将数据写入请求体
req.write(postData);
req.end();
注意:为那些在互联网上搜索该特定错误消息时可能会偶然发现此讨论的其他人记录此内容。
事实证明,上面的大部分讨论都没有抓住重点,因为错误不是由客户端站点引起的,因此为request
尝试不同的“解决方法”很可能不起作用。 问题是服务器端的HTTP请求socket因为后台操作延迟过长,跑到idle timeout,然后关闭socket。 这会导致客户端出现 ECONNRESET。
如果您还负责服务器端源代码并使用 express/koa 框架,那么您应该在启动长期后端操作之前禁用 HTTP 请求套接字上的空闲超时。 例如,对于 ES6 koa 路由处理程序:
javascript
ctx => {
....
ctx.socket.setTimeout(0);
// now trigger the long lasting backend operation
....
}
现在我的客户端超时问题消失了,无需更改客户端代码中的任何行...
确保您使用正确的 SSL 调用 url - 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,问题就消失了。
Node 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 非常缓慢并最终从 B 收到 500 错误时收到挂断错误(该错误在 api A 中处理)。
我确定这不是超时问题,因为 api A 做了很多事情并且总是返回响应非常慢,但没有错误。
现在我真的很困惑 express 和 request 是如何工作的,500 错误已经由 api A 处理,并且有其他操作跟进。 为什么测试应用程序仍然会出现套接字挂断错误?
我也在最新的节点(8.6)以及最新的 7.x 版本中遇到了这个问题。 如果有人想尝试一下,这里有详细信息: https :
如果我可以提供任何其他信息,请告诉我!
Node 6.10.0 也有同样的问题
另一种可能的解释:您在 HTTP 正文中发送的数据多于 Content-Length 标头中指定的数据
+1
节点 8.6.0
要解决此问题,您应该:
1-添加 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
2-将 zone.js 升级到 v0.7.4
我遇到了同样的问题,解决方法是使用环境变量 NO_PROXY="yourcompany.com" 以及strictSSL: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 “占用”端口并在我的GET
请求之后立即发送带有FIN
标志的 TCP 数据包,尽管目前尚不清楚为什么 chrome 和邮递员没有问题解决这个问题 - 也许他们有一些额外的弹性
我遇到了这个问题,GZIP 开启了,Keep alive 也开启了。
添加软件包后问题消失了。
const zlib = require('zlib'); // for GZIP
const http = require('http');
const https = require('https');
同样的问题 - 通过将 URL 从 localhost 更改为主机的实际 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 服务器)启动,并且数据是{}
,则 stringify 函数的postData
转换为{}
,但是 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 === '{}' ? '' : 发布数据__
希望它可以帮助你
对我来说,这是在发送带有content-length : 0
请求标头的POST
请求时发生的。 我不知道这个结果是否合理,但至少我认为也许您可以尝试删除您添加的标题中的每个项目以找出问题的原因。
当我将“GET”更改为“POST”时,修复它。 但不知道为什么,我从https://cnodejs.org/topic/57a6c35282e6ea4870ecd3f2修复它,有人说如果你使用 'GET',代码无法运行res.on('data', cb)
@LvChengbin我在POST
请求上也遇到了同样的问题。 用身体的实际长度替换Content-Length : 0
对我有用。
谁来救救我:angel:
我在 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 (internal/process/next_tick.js:180:9) 代码:'ECONNR
ESET' }
我的代码如下。
让请求=要求(“请求”);
要求({
网址:“ http://192.168.31.29:3019/tactics/createMediaHotTotal20 ”,
方法:“获取”,
json:是的,
标题:{
“内容类型”:“应用程序/json”
},
},函数(错误,响应,正文){
如果(错误){
控制台日志(错误)
} 别的 {
解决(正文);
}
})
同样的问题,节点 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()
。 作品
我有同样的错误。 当 Content-Length 添加到请求时,POST 工作。 希望这对你们有帮助:
'Content-Length': Buffer.byteLength(data) //POST 需要Content-Length
就我而言,我可以通过设置
Connection: keep-alive
标头来解决该问题。
拯救我的一天!
我挖了一点。
将 POST 发送到 nodejs 服务器时,我有一个每周一次的请求问题。
去北斗后,我发现如果请求格式错误,nodejs只会挂起连接。
看起来当 POST 请求被传递到 http.request 时会发生一些后面的错误
在我的情况下,正文发送时没有最后一个符号,可能是由于setContentLength()
的 Content-Length 计算错误
使用“http”而不是“https”协议也可以解决问题。
这非常令人沮丧。 我无法控制服务器,但无法从 Nodejs 执行 POST(使用请求或超级代理),但可以成功执行 curl 或 Postman。 更疯狂的是,如果我在请求语句上暂停使用调试器并继续,调用会成功。
在我的情况下,刚刚删除了“主机”标题,解决了。
我们在升级到更新的 nodejs ( 10.16.3
) 后遇到了这个问题。 在客户端,我们使用带有keepAlive: true
nodejs http 代理。 看起来发生了以下情况:
解决方案
到目前为止,我们已经找到了两种解决方案:
1) 在服务器端禁用keepAliveTimeout
通过设置它等于0
2) 在小于keepAliveTimeout
值(默认为 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 测试我的路线时,我遇到了同样的问题。 荒谬的是,前三个通过ok! 我整天都在努力面对它
这是我的代码:
```
日志(“工作测试”)
it("测试 /login 路由", done => {
柴
.request(服务器)
.post("/登录")
。发送({ })
.end(函数(错误, res) {
期望(错误).to.be.null;
期望(res.status).to.not.equal(404);
期望(res.body.message).to.not.be.equal(“未找到”);
完毕();
});
});
日志(错误测试失败:套接字挂起)
it('测试 /getResetCodePassword 路由', (done)=> {
柴
.request(服务器)
.patch("/getResetCodePassword")
。发送({ })
.end( (err,res) => {
控制台日志(错误);
完毕();
})
})
```
最有用的评论
谁来救救我:angel: