Javascript 如何处理ETIMEDOUT错误?
如何处理此呼叫上的etimedout错误Javascript 如何处理ETIMEDOUT错误?,javascript,node.js,http,error-handling,timeout,Javascript,Node.js,Http,Error Handling,Timeout,如何处理此呼叫上的etimedout错误 var remotePath = "myremoteurltocopy" var localStream = fs.createWriteStream("myfil");; var out = request({ uri: remotePath }); out.on('response', function (resp) { if (resp.statusCode === 200) {
var remotePath = "myremoteurltocopy"
var localStream = fs.createWriteStream("myfil");;
var out = request({ uri: remotePath });
out.on('response', function (resp) {
if (resp.statusCode === 200) {
out.pipe(localStream);
localStream.on('close', function () {
copyconcurenceacces--;
console.log('aftercopy');
callback(null, localFile);
});
}
else
callback(new Error("No file found at given url."), null);
})
有没有办法等得更久?或者再次请求远程文件
到底是什么导致了这个错误?仅超时?这是由于在给定的时间内未收到请求响应(通过
超时
请求模块选项)造成的
基本上,要首先捕获该错误,您需要在error
上注册一个处理程序,这样就不会再抛出未处理的错误:out.on('error',function(err){/*handleerrors here*/})
。再解释一下
在处理程序中,您可以检查错误是否为ETIMEDOUT并应用您自己的逻辑:if(err.message.code===“ETIMEDOUT”){/*应用逻辑*/}
如果您想再次请求该文件,我建议使用或模块。它使事情变得简单得多
如果要等待更长时间,可以设置。您可以将其设置为0,表示无超时。我们可以查看error对象中提到可能系统错误的属性
code
,如果ETIMEDOUT
网络调用失败,则相应地采取行动
if (err.code === 'ETIMEDOUT') {
console.log('My dish error: ', util.inspect(err, { showHidden: true, depth: 2 }));
}
如果您使用的是NodeJS,那么这可能是一个可能的解决方案
const express = require("express");
const app = express();
const server = app.listen(8080);
server.keepAliveTimeout = 61 * 1000;
我相信这些节点核心错误有一个
.code
或类似的属性,它只包含“etimedout”或类似的内容,您可以检查它们,而不必执行err.message.match()
。我确信它们有,我已经看到了。但我不记得他是哪一个。谢谢你的帮助。你能给我一些链接,让我更好地理解nodejs中的错误处理和捕获吗?几秒钟后我有一个etimdout。你能告诉我这个错误是由超时引起的,或者它可能被另一个错误触发吗?@mcbjam更新了它。它是由超时触发的。可能没有其他错误。虽然ESOCKETTIMEOUT也可能会在套接字冻结时被触发。一般来说,它们不会同时触发。最好是添加一些注释,而不仅仅是抛出代码。我还必须使用err.code
来获取“ETIMEDOUT”错误代码。最高票数的答案err.message.code
对我不起作用。所以,谢谢你:)你可以试试这个keepAliveTimeout,更多详情请查看下面