当前位置: 首页 > 知识库问答 >
问题:

在nodejs和express制作的REST API中设置响应状态和JSON内容的正确方法

谷涵容
2023-03-14

我正在通过构建一个小的rest API来玩Nodejs和express。我的问题是,设置代码状态以及响应数据的好做法/最佳方法是什么?

让我用一点代码来解释一下(我不会放启动服务器所必需的节点和express代码,只放所关注的路由器方法):

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,这是OK的。但这是最好的方法吗?是否存在我必须自己设置状态以及返回的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的状态。

更多的资源/建议,以了解更多关于这个主题,是非常欢迎的。

共有1个答案

叶鸿煊
2023-03-14

Express API参考涵盖了这种情况。

请参阅“状态”和“发送”。

简而言之,您只需在调用jsonsend之前调用status方法:

res.status(500).send({ error: "boo:(" });
 类似资料:
  • 我想要得到一个漂亮而简单的带有设置状态代码的API,并获得swagger(swashbuckle)的文档 首先,我的控制器是这样的: 很好,Swagger显示了JSON格式的结果。问题是,我不能设置状态代码(比如,如果database-error我可以设置为err500或s.th.)。 null null 现在,状态代码设置正确,但swagger没有显示任何结果。 所以,我想这可能是个大摇大摆的问

  • 我正在使用apache的HttpClient(通过Fluent API)。当我获得响应对象时,我首先执行以下操作: 如果状态代码为4xx或5xx,我将抛出异常,或者返回内容: 这里是类型为的对象。但当我运行此程序时,我得到: 我怎样才能避开这件事?

  • 问题内容: 因此,我在Struts2中使用freemarker模板来制定我的响应。但是,由于我也尝试使用taconite,因此需要使用“ text / xml”的内容类型发送响应。我似乎找不到使用freemarker指令设置内容类型的方法,而且我对Struts并不精通,无法知道是否有办法通过它来完成。 那么,我应该怎么做呢? 问题答案: 或者您可以在struts.xml中进行设置

  • 我已经开始学习ReactJS,有一个关于无状态和有状态组件的问题。一般来说,我遵循组件和容器的分离,如下所示。有状态函数在组件文件夹中,其他逻辑操作在容器文件夹下。文件夹结构 让我们思考材料UI下拉列表。 为了打开和关闭下拉菜单和方法更改打开状态,这意味着它是有状态组件。但没有其他变化(省略年龄设置)。它似乎是可重用的组件,但包括状态与非常简单的操作,如打开和关闭。我应该放入哪个文件夹?容器还是组

  • 问题: 我将数据毫无问题地输入到div中,但是,文本并没有按应有的方式显示出来。当数据被抛入div时,格式将被删除。段落只是一个文本块。奇怪的是,在Firebug中,如果我检查&更改: 至 整块文本都被修复了--正如我需要的那样!因此,现在,如果我继续,将实际页面中的 更改为 匿名用户 包含文本的JSON数据在up中没有标记,因此当您使用函数设置 内容时,它会按照预期工作。 您必须将用于创建段落

  • 我还用测试了这一点...现在它甚至不再像以前那样工作了!! 所有这些都是通过诸如、和等类/接口来处理的(都在中设置)。显然,有一个重定向到URL的操作,将原始请求/和/或响应包装到其他内容中,例如,我可以将请求调试为符合以下内容:SecurityContextHolderAwareRequestWrapper[FirewalledRequest[org.apache.catalina.core.A