使用 Node 或 Express 返回 JSON 的正确方法

2024-01-12

因此,我们可以尝试获取以下 JSON 对象:

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked

{
   "anotherKey": "anotherValue",
   "key": "value"
}
$

有没有办法使用 Node 或 Express 在服务器的响应中生成完全相同的正文?显然,可以设置标头并指示响应的内容类型将是“application/json”,但是可以采用不同的方式来写入/发送对象。我见过常用的命令是使用以下形式的命令:

response.write(JSON.stringify(anObject));

然而,这有两点可以让人争论,就好像它们是“问题”一样:

  • 我们正在发送一个字符串。
  • 而且最后没有换行符。

另一个想法是使用命令:

response.send(anObject);

这似乎是基于类似于上面第一个示例的curl 输出发送一个 JSON 对象。但是,当在终端上再次使用curl 时,主体末尾没有新行字符。那么,如何使用节点或节点/表达来实际写下这样的内容并在末尾附加一个换行符呢?


该响应也是一个字符串,如果您想发送美化的响应,出于某种尴尬的原因,您可以使用类似的东西JSON.stringify(anObject, null, 3)

重要的是您设置Content-Type标头至application/json, too.

var http = require('http');

var app = http.createServer(function(req,res){
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ a: 1 }));
});
app.listen(3000);

// > {"a":1}

美化:

var http = require('http');

var app = http.createServer(function(req,res){
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ a: 1 }, null, 3));
});
app.listen(3000);

// >  {
// >     "a": 1
// >  }

我不太确定为什么你想用换行符终止它,但你可以这样做JSON.stringify(...) + '\n'为了实现这一点。

Express

在快递中,您可以通过以下方式执行此操作改为更改选项 http://expressjs.com/3x/api.html.

'json replacer'JSON替换回调,默认为null

'json spaces'用于格式化的 JSON 响应空间,开发中默认为 2,生产中默认为 0

实际上不建议设置为 40

app.set('json spaces', 40);

然后你可以用一些 json 来响应。

res.json({ a: 1 });

它将使用'json spaces' 配置来美化它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Node 或 Express 返回 JSON 的正确方法 的相关文章

随机推荐

  • PHPUnit - 通过命令行测试运行程序运行特定的测试套件[重复]

    这个问题在这里已经有答案了 是否可以通过命令行测试运行程序从配置文件指定要运行哪个测试套件 例如 如果我有以下 xml 配置
  • 刷新元素组

    我有一个 JSF 页面 它本质上只是数据行和列 每行的数据都来自类实例的属性 每行上都有一个链接 单击该链接时会调用一个支持 bean 方法来刷新该行上的数据 行由代表其下方的行组的标题分隔 我也想将标题设为链接 以便它将刷新其下方的所有行
  • 将数组转换为对象

    我正在尝试编写一个函数 它接受一个数组数组 并返回一个对象 其中数组中的每对元素作为键值对 我搜索了堆栈溢出并提出了以下代码 但是 我下面的代码仅返回第一个数组 make Ford 我的代码不返回其余的数组 关于为什么我的函数不返回数组数组
  • 链接到类的 PyCharm 文档字符串

    IntelliJ IDEA 允许链接到 Java 文档注释中的其他方法 这允许我将光标移动到符号上并使用键盘快捷键跳转到定义 以及在按住 ctrl 的同时将鼠标悬停在可单击的符号下方显示下划线 例如 This is a link to a
  • 在尝试导入插件之前使用 fullcalendar lib

    我在 Angular 9 项目中安装了 FullCalendar 5 然后我在浏览器控制台中收到此错误 并且页面中出现任何内容 vdom js 3 Uncaught Error Please import the top level ful
  • 防止页面上每个 Dojo xhr 请求中的缓存

    我可以使用以下命令拦截 Dojo 1 6 1 xhr 请求IO 管道主题如此处所述 Dojo 拦截 XHR 调用 https stackoverflow com questions 4781018 dojo intercepting xhr
  • 如果已删除,则从 NuGet 获取 DLL

    我在 NuGet 上阅读了相当多的内容 但似乎找不到我想要的东西 本质上 我希望它能像 Apache Ivy 一样工作 您只需签入您的配置文件 没有任何二进制文件 并告诉 NuGet 获取所有 DLL 从而使您免于对大量 DLL 进行版本控
  • 如何将 @tailwind CSS 规则添加到 CSS 检查器

    顺风 CSS https tailwindcss com docs what is tailwind adds a tailwind CSS at被标记为未知的规则 我怎样才能避免这个错误 例如 styles css tailwind pr
  • 从 JavaScript 使用 XML WCF REST Web 服务

    我有一个公开 REST WCF 服务的 WPF 应用程序 通过WebServiceHost 合同看起来像这样 简化 ServiceContract public interface IItemServiceContract WebGet U
  • 使用 Grails Spring Security CAS 插件重定向循环

    我正在处理一个涉及 CAS 服务器的项目 该项目使用单点登录 SSO 与其他基于 Spring 的项目一起使用 但我收到了涉及 Grails spring security cas 插件的重定向循环 版本 spring security C
  • 不工作

    我的 Web config 包含以下内容
  • 将 double 转换为 QString

    我正在用 Qt 编写一个程序 我想转换一个double into a QString in C 使用 QString 的 number 方法 文档是here https doc qt io qt 5 qstring html number
  • Spark 读取为 jdbc 将所有行返回为列名

    我正在 Scala 2 12 中使用 Spark 3 x SQL 查询 Spark 的数据库表 我遵循了互联网上给出的示例 我正在使用的数据库 Spark SQL的数据库并使用Centos 7 我正在查询的表 示例 具有以下列 create
  • Json.Net 无法序列化为流,但可以正常序列化为字符串

    在内部 JsonConvert SerializeObject obj Formatting Indented 归结为 JsonSerializer jsonSerializer JsonSerializer Create null Str
  • 如何向 Firebase 验证服务器?

    我有一个在 Firebase 上编写的应用程序 安全规则和客户端代码不足以使我的应用程序正常工作 我需要连接服务器来执行一些任务 清理难以清理的非规范化数据断开连接时 处理程序 https www firebase com docs web
  • 图像未调整大小(仅限默认 Bootstrap 类)

    我正在使用 Bootstrap 3 0 dist 现在正在学习一些 Bootstrap 教程 试图了解它是如何工作的 我所做的一切都完全按照教程中的方式进行 适用于 v2 所以我将类更改为 v3 并且我不使用任何自定义 CSS 或任何内容
  • 包含非 Mavenized 依赖项,以便与 maven-shade-plugin 一起使用

    我想包括G数据客户端 http code google com p gdata java client 它不使用 Maven 作为我的 Maven 项目的依赖项 它以一堆 JAR 文件的形式提供 另外 我用Maven 阴影插件 http m
  • 如何将数据框列转换为序列

    我有一个数据框如下 LABEL TERM 4 inhibitori effect 4 novel therapeut 4 antiinflammator 4 promis approach 4 cell function 4 cell li
  • 使用 Capistrano 3 部署 Rails 应用程序时跳过数据库迁移

    当我们跑步时cap deploy 它在部署期间运行所有迁移 我们必须将应用程序指向现有数据库 并且不想修改现有数据库 有人可以建议我们如何在部署应用程序时跳过迁移步骤吗 我想你正在使用卡皮斯特拉诺 Rails https github co
  • 使用 Node 或 Express 返回 JSON 的正确方法

    因此 我们可以尝试获取以下 JSON 对象 curl i X GET http echo jsontest com key value anotherKey anotherValue HTTP 1 1 200 OK Access Contr