javascript - 如何在 Express.js 中处理 ETIMEDOUT

标签 javascript node.js express

我开发了一个与 FTP 服务器交互的 Node.js/Express.js 应用程序,问题是如果服务器离线,应用程序就会崩溃,因为我找不到处理 ETIMEDOUT 异常的方法。顺便说一下,我用于 FTP 的模块是 jsftp。

发生这种情况的代码部分如下所示:

router.post("/", upload, function(req, res, next) {
    try {
        ftp.auth(ftp.user, ftp.pass, function(error) {
            if(error) {
                res.status("500");
                res.end("Error: Couldn't authenticate into the FTP server.");
                console.log(error);
            } else {    // Authenticated successfully into the FTP server
                /* some code here */
            }
        });
    } catch(error) {    // Probably timeout error
        res.status("500");
        res.end("Internal Server Error");
        console.log(error);
    }
});

我尝试将 .on('error', function(e) {/* my code here */} 附加到 router.post 函数,但随后我得到 TypeError: router.post(...).on 不是函数

有人有什么建议吗?我很感激。

最佳答案

您的问题类似于 this question

这些步骤是处理错误并重试。

http.Client.on('error', function (err) { 
    /* handle errors here */ 
    if (err.message.code === 'ETIMEDOUT') { 
        /* apply logic to retry */ }
})

使用node-retry以保持重试逻辑简单。

关于javascript - 如何在 Express.js 中处理 ETIMEDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877747/

相关文章:

node.js - 如何解决 MEAN stack api 项目中 undefined reference 错误响应数据?

javascript - 跟踪用户输入并提供单词完成- Angular

javascript - 如何将 InMemoryUploadedFile 上传到我的 S3 存储桶?

node.js - 梯形校正 : Pass mongoose connection into Keystone options

node.js - 找不到模块 'node-gcm'

javascript - Laravel 5 扩展 Elixir 以包含 browserify

node.js - 如何使用快速验证器验证字符串数组?

node.js - Passport 登录和持久 session

javascript - Ajax:用新数据完全替换 div 内容

javascript - 是否可以在 Handlebars 模板中嵌套 if/else 语句?