Javascript 如何处理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) {

如何处理此呼叫上的etimedout错误

 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,更多详情请查看下面