NodeJS重试POST / PUT / DELETE API,如果响应时间超过nodeJS默认时间

时间:2017-03-10 10:20:27

标签: node.js express request

NodeJS正在重试后端API调用,如果它在默认超时(2分钟)内没有得到任何响应。这导致POST / PUT / DELETE API调用的问题,这需要更多的响应时间(> 2分钟)。对于来自用户的一个请求,请求将从Nodej多次后端。

我不想增加默认超时,因为我的回复每次都会有所不同。

如果nodeJs / expressJS中有任何配置,请告诉我,以便我可以完全停止nodeJS重试或仅为POST / PUT / DELETE API自定义配置。

我如何发送请求的示例:

let express = require('express');
let router = express.Router();
let async = require('async');
let expressListRoutes = require('express-list-routes');

async.parallel([
    function () {
        //url: resource/add/
        router.post('/add', function (req, res) {

            let uiModel = req.body;
            let outputJson = Parser.parse(uiModel, 'CREATE');
            let requestPromiseModel = {
                uri: `${RESOURCES}/${uiModel.resourcePluginId}`,
                method: HttpMethod.POST,
                json: true,
                body: outputJson,
                headers: {
                    'Accept': MIMETypes.APPLICATION_JSON,
                    'Authorization': MIMETypes.TOKEN_TYPE + req.token
                },
                resolveWithFullResponse: true
            };
            rp(requestPromiseModel).then(function (results) {
                res.send(results);
            }).catch(function (err) {
                log.error(`Error: Create Resource Action: ${err}`);
                res.send(err.response);
            });
        });
    }

]);

expressListRoutes({prefix: '/resource'}, "API:", router);

module.exports = router;    

感谢您提前帮助:)

1 个答案:

答案 0 :(得分:0)

在代码中使用async.parallel是没用的。您只运行一个函数,因此并行运行一个函数没有多大意义。此函数也不会将async.parallel提供的回调作为其第一个参数调用,因此async.parallel认为它永远不会完成。更糟糕的是,你在该函数中所做的就是调用router.post(),可以直接调用:

router.post(
    // ...
);

而不是:

async.parallel([
    function () {
        router.post(
            // ...
        );
    }
]);

如你所知。

它唯一能做的就是在调用expressListRoutes({prefix: '/resource'}, "API:", router);之前调用router.post()

您还在使用req.body而未使用body-parser

最后,这是一种定义requestrequest-promise超时的方法 - 请参阅文档:

  

timeout - 整数,包含在中止请求之前等待服务器发送响应头(并启动响应主体)的毫秒数。请注意,如果无法建立基础TCP连接,则操作系统范围的TCP连接超时将取代超时选项(Linux中的默认值可以是20-120秒)。

确保您的操作系统超时时间优先。