如何从nodejs / express向浏览器发送成功状态?


73

我在nodeJS / Expressjs服务器中编写了以下代码:

app.post('/settings', function(req, res){
    var myData = {
        a: req.param('a')
        ,b: req.param('b')
        ,c: req.param('c')
        ,d: req.param('d')
    }

    var outputFilename = 'config.json';

    fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
        if(err) {
          console.log(err);
        } else {
          console.log("Config file as been overwriten");
        }
    }); 
});

这使我可以获取提交的表单数据并将其写入JSON文件。

这很完美。但是客户端仍然处于某种发布状态,并最终超时。因此,我需要将某种成功状态或成功标头发送回客户端。

我应该怎么做?

先感谢您!

Answers:


144

Express Update 2015:

使用此代替:

res.sendStatus(200)

已弃用:

res.send(200)  

我正在获取ServerResponse没有方法sendStatus
naoru

1
您确定已安装Express且它是Express v4吗?
ac360

1
是! 在答案中加上日期。这么多过时的答案在那里。特别是对于快速变化的堆栈。我们至少应该好几个月了:)
亚当·门多萨

1
sendStatus似乎对我不起作用(版本4.0.0)
2015年

.sendStatus()在expressjs.com/en/4x/api.html#res.sendStatus上有说明。我也将链接添加到了答案。
mikemaccana

29

只是想添加,您可以通过res.json()助手发送json 。

res.json({ok:true}); // status 200 is default

res.json(500, {error:"internal server error"}); // status 500

2015年更新:

res.json(status, obj) 不赞成使用 res.status(status).json(obj)

res.status(500).json({error: "Internal server error"});

12

在Express 4中,您应该执行以下操作:

res.status(200).json({status:"ok"})

而不是已弃用的:

res.json(200,{status:"ok"})

10

Jup,您需要将答案发送回去,最简单的方法是

res.send(200);

在的回调处理程序中writeFile

200是HTTP状态代码,因此您甚至可以在失败的情况下进行更改:

if (err) {
    res.send(500);
} else {
    res.send(200);
}

是的,这正是所缺少的!
tUrG0n 2012年

像魅力一样工作。非常感谢你!
jansmolders86
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.