我正在使用Nodejs和通过构建一个小的rest API来表达。我的问题是,设置代码状态以及响应数据的良好实践/最佳方法是什么?
让我用一小段代码来解释(我不会放启动服务器所需的节点和表达代码,只放相关的路由器方法):
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
res.json(user);
});
exports.getUserById = function(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) return users[i];
}
};
下面的代码工作完美,当发送一个请求与邮差,我得到以下结果:
如您所见,状态显示为200,这是正常的。但这是最好的方法吗?是否有一种情况下,我应该设置自己的状态,以及返回的JSON?还是特快专递?
例如,我只是做了一个快速测试,并稍微修改了上面的get方法:
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
if (user == null || user == 'undefined') {
res.status(404);
}
res.json(user);
});
如您所见,如果在数组中没有找到用户,我将只设置404状态。
更多关于这个主题的资源/建议是非常欢迎的。
当使用res.send, res.json等时,状态200将是默认值。
你可以像res.status(500)一样设置状态。Json ({error: 'something is wrong'});
我经常会这样做……
router.get('/something', function(req, res, next) {
// Some stuff here
if(err) {
res.status(500);
return next(err);
}
// More stuff here
});
然后让我的错误中间件发送响应,并在出现错误时执行我需要做的任何其他事情。
另外:res.sendStatus(status)从4.9.0版本开始添加
http://expressjs.com/4x/api.html#res.sendStatus
获取完整HttpResponse的标准方法,包括以下属性
Body //包含您的数据
头
好吧
状态
statusText
类型
url
在后端,这样做
router.post('/signup', (req, res, next) => {
// res object have its own statusMessage property so utilize this
res.statusText = 'Your have signed-up succesfully'
return res.status(200).send('You are doing a great job')
})
在Frontend中,例如在Angular中,只需执行:
let url = `http://example.com/signup`
this.http.post(url, { profile: data }, {
observe: 'response' // remember to add this, you'll get pure HttpResponse
}).subscribe(response => {
console.log(response)
})