duk*_*ble 162 rest http node.js express
我正在玩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];
}
};
Run Code Online (Sandbox Code Playgroud)
下面的代码工作正常,当使用Postman发送请求时,我得到以下结果:

如您所见,状态显示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);
});
Run Code Online (Sandbox Code Playgroud)
如您所见,如果在阵列中找不到用户,我将只设置404状态.
有关此主题的更多信息的资源/建议非常受欢迎.
Mic*_*dak 197
Express API参考涵盖了这种情况.
简而言之,您只需在调用status之前调用该方法json或send:
res.status(500).send({ error: "boo:(" });
Run Code Online (Sandbox Code Playgroud)
mza*_*zar 64
你可以这样做:
res.status(400).json(json_response);
Run Code Online (Sandbox Code Playgroud)
这会将HTTP状态代码设置为400,即使在快速4中也可以.
Jor*_*ias 35
当使用的200状态将是默认的res.send,res.json等等.
您可以设置状态 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
});
Run Code Online (Sandbox Code Playgroud)
然后让我的错误中间件发送响应,并在发生错误时做我需要做的任何事情.
另外:res.sendStatus(status)自版本4.9.0
开始添加http://expressjs.com/4x/api.html#res.sendStatus
cml*_*ndz 18
HTTP状态代码列表
关于状态响应的良好做法是,可预测地,根据错误发送正确的HTTP状态代码(客户端错误为4xx,服务器错误为5xx),关于实际的JSON响应,没有"圣经"但是一个好主意可能是在成功的响应中(再次)将状态和数据作为根对象的2个不同属性发送(这样您就可以让客户端有机会从HTTP头和有效负载本身捕获状态)和第3个属性来解释在出错的情况下以人类可理解的方式出错.
Stripe的 API在现实世界中表现相似.
即
好
200, {status: 200, data: [...]}
Run Code Online (Sandbox Code Playgroud)
错误
400, {status: 400, data: null, message: "You must send foo and bar to baz..."}
Run Code Online (Sandbox Code Playgroud)
mrk*_*rks 13
我在我的Express.js应用程序中使用它:
app.get('/', function (req, res) {
res.status(200).json({
message: 'Welcome to the project-name api'
});
});
Run Code Online (Sandbox Code Playgroud)
获取包含以下属性的完整 HttpResponse 的标准方法
在后端,执行此操作
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')
})
Run Code Online (Sandbox Code Playgroud)
在前端,例如 in 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)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
230399 次 |
| 最近记录: |