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

Express创建标准JSON返回格式

孙和安
2023-03-14

我是新来表达,目前如果我想发送一个回应,我会这样做

//...
res.json({
  status: 200,
  message: "success",
  data: "something"
})
//...

对于我所有的控制器函数,我会这样做。我想这是一种压倒性的,所以我在想是否有可能制作一个广义版本的响应。

所以经过一些搜索,我发现有两种方法可以实现这一点:

我找到了这个答案。这很清楚,但我认为这是浪费时间,我的控制器不够可读,我必须在每个控制器函数中做以下事情

req.responseObject = response;
return next()

这是非常有希望的,但不幸的是,经过这么多次尝试和遵循express docs,我无法让它工作。这是我迄今为止尝试的

我在这里创建了这个util函数:

//myRes.js
module.exports = function (code, message, payload) {
  return this.status(code).json({
    status: 'success',  // this will be variable according to whatever code I get
    code: code,
    message: message || '',
    payload: payload || '',
  });
};

然后我在app.js中添加了这一行

// app.js
const express = require('express');
const app = express();
const myRes= require('./utils/myRes');
app.response.send = myRes;
//...

这是我如何在我的控制器上使用它

res.send(200, "hello world", [{"key": "value"}])

当我尝试运行这个时,我得到了这个错误堆栈

RangeError: Maximum call stack size exceeded
    at JSON.stringify (<anonymous>)
    at stringify ([project_dir]\node_modules\express\lib\response.js:1123:12)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:260:14)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:267:15)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:267:15)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:267:15)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:267:15)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:267:15)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)
    at ServerResponse.json ([project_dir]\node_modules\express\lib\response.js:267:15)
    at ServerResponse.module.exports [as send] ([project_dir]\src\utils\response.js:2:28)

为什么是JSON。stringify抱怨我没有在我的整个应用程序中使用这个函数

此外,我不只是上限这2个解决方案,你可以建议其他方式,如果你认为这是更好的

共有1个答案

班承德
2023-03-14

澄清@Ariel评论中所说的内容

快速响应调用内部发送从 express at lines [120, 123, 136] 引用此函数,这导致了一个无限循环,这就是为什么它说

超出最大调用堆栈大小

所以我需要做的就是把我的函数名从send改成“sends ”,这样就可以了

试图覆盖内置的发送功能是个坏主意

 类似资料:
  • 问题内容: 对于一个应用程序,我想按如下所述创建JSON格式, 我正在使用以下代码创建相同的代码, 我的格式如下, }} 有人可以帮我创建格式吗? 谢谢。 问题答案: 所需数据,您可以通过这种方式获得。只需将其dict转换为JSon或您想要的任何其他格式即可。删除该数组,您不需要它,正如您以要求的格式提到的那样。

  • 问题内容: 是否存在用于构造来自API的JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,因此您不必担心很多,而是“响应样板”。我的意思的例子: 成功的请求: 请求失败: 问题答案: 是的,已经出现了一些标准(尽管对标准的定义有一些自由): JSON API -JSON API还涵盖创建和更新资源,而不仅仅是响应。 JSend-简单,可能已经在做。 OData JSON协议 -非常

  • 问题内容: 如何将Webmethod的值以JSON格式返回给客户端? 我要返回两个静态int值。 我是否需要使用这两个属性创建新对象并返回它? GetStatus()方法经常被调用,我不喜欢每次仅用于json格式创建一个特殊对象的想法。 在客户端,我在捕获返回值: 问题答案: 我只想带一个物体。它符合您的需求。如果您有两个返回值,则必须以结构化的方式将它们放在一起。

  • 本文向大家介绍举例说明json的标准格式相关面试题,主要包含被问及举例说明json的标准格式时的应答技巧和注意事项,需要的朋友参考一下 JSON数值 JSON字符串 JSON数组 JSON对象 JSON对象数组 JSON数组对象

  • 问题内容: 目的是调用一个执行该操作的方法,然后返回一个JSON对象。 我是JSON的新手。 我有一个default.aspx,并在其中下面的代码。现在,我希望Default.aspx.cs中的普通方法在此处的click事件上运行。 }); Default.aspx.cs类似于以下内容: 我在哪里错了?我应该以某种方式使用它还是仅适用于Web服务? 问题答案: 我建议一个。没有页面生命周期(因此速

  • 问题内容: 我正在使用python 2.6中的标准json模块来序列化浮点列表。但是,我得到这样的结果: 我希望浮点数仅使用两位十进制数字进行格式化。输出应如下所示: 我尝试定义自己的JSON Encoder类: 这适用于唯一的float对象: 但是对于嵌套对象失败: 我不想有外部依赖性,所以我更喜欢使用标准的json模块。 我该如何实现? 问题答案: 注: 这并 没有 任何最新版本的Python