为什么settimeout打破Expressjs

时间:2016-10-07 03:17:24

标签: javascript node.js express

我在express.js

中有以下代码
// POST api/posts/:id
exports.post = function(req, res){

    req.body[0].id = posts.length + 1;
    posts.push(req.body[0]);
    console.log(posts);
    fs.writeFileSync("json/posts.json", JSON.stringify(posts));
    setTimeout(function(){
        res.set.apply(res, utils.contentType);
        res.json(req.body[0]);
    }, utils.randomNumberBetween(1000, 3000));


};

当我发布一个简单的json对象时,我收到以下错误。

org.apache.http.NoHttpResponseException: localhost:9000 failed to respond

如果我删除settimeout,一切都按预期工作。我在其他地方使用了settimeout,如:

// GET api/posts
exports.get = function(req, res){
    setTimeout(function(){
        res.set.apply(res, utils.contentType);
        res.json(posts);
    }, utils.randomNumberBetween(1000, 3000));
};

所以我不明白为什么在发帖时会破坏。有什么想法??

1 个答案:

答案 0 :(得分:2)

这是因为发出请求的应用程序需要在一定时间内表达响应,比如5秒。如果它没有收到任何回复,它认为出了问题。解决此问题的一件事是更改“发送/请求”应用程序等待/侦听响应的时间。