我正在使用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.sendStatus(status)已在4.9.0版本中添加

你可以使用这些res.sendStatus() || res.status()方法之一

下面是res.sendStatus() || res.status()之间的差异


res.sendStatus(200) // equivalent to res.status(200).send('OK')
res.sendStatus(403) // equivalent to res.status(403).send('Forbidden')
res.sendStatus(404) // equivalent to res.status(404).send('Not Found')
res.sendStatus(500) // equivalent to res.status(500).send('Internal Server Error')

我希望有人觉得这有帮助 谢谢

其他回答

你可以这样做:

res.status(400).json(json_response);

这将把HTTP状态代码设置为400,即使在express 4中也能工作。

你可以这样做

            return res.status(201).json({
                statusCode: req.statusCode,
                method: req.method,
                message: 'Question has been added'
            });
try {
  var data = {foo: "bar"};
  res.json(JSON.stringify(data));
}
catch (e) {
  res.status(500).json(JSON.stringify(e));
}
res.status(500).jsonp(dataRes);

我在我的Express.js应用程序中使用这个:

app.get('/', function (req, res) {
    res.status(200).json({
        message: 'Welcome to the project-name api'
    });
});