为什么settimeout会破坏Expressjs

3
我在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
出于好奇,你为什么要这样做?为什么不直接使用fs.writeFile(或更好的文件流),然后在其回调或其中一个事件中进行响应呢? - Paul
1个回答

2

这是因为发起请求的应用程序期望在一定时间内(比如5秒)从express获得响应。如果没有收到任何响应,它会认为出了问题。你可以做的一件事是改变你的“发送/请求”应用程序等待/监听响应的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接