当前位置: 首页 > 面试题库 >

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

姬银龙
2023-03-14
问题内容

因此,可以尝试获取以下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时,在主体的末端没有换行符。那么,如何使用node或node
/ express实际写下这样的内容并在末尾添加换行符呢?


问题答案:

该响应也是一个字符串,如果您要发送经过修饰的响应,出于某种尴尬的原因,可以使用类似 JSON.stringify(anObject, null, 3)

同样重要的是将Content-Type标头设置为application/json

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中,您可以通过更改选项来实现。

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

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

实际不建议设置为40

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

然后,您可以使用一些json进行响应。

res.json({ a: 1 });

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



 类似资料:
  • 问题内容: 我在使用flask.jsonify函数从字典输入中输出格式化的json响应时遇到了一些麻烦,如此处所述。 我的代码似乎正在返回Response对象,而不是我想要的格式化json对象。 我有 其中dict是从调用函数返回的字典对象。 在我的模板中,我有: 显示如下: 我该如何返回我要寻找的json表示形式? 问题答案: 你可以像这样使用json.dumps: 然后将其格式化为模板,如下所

  • 问题内容: 我有2个DropDownList,例如Master-Slave。这是我的Default.aspx: 这是我的脚本: 和我的处理程序: 但没有要追加的内容。另外,我在firebug窗口中看到如下响应(当我从Master ddl中选择G2时): 对于更具体的视图,下图是当我在Master ddl中选择G3时,firebug窗口中的JSON选项卡: 我用这个新的脚本来更改脚本的成功方法: 当

  • 问题内容: 我使用mysql 5.7 我想将联接表的结果串联到单列中。我使用包裹在函数中的函数。这是查询 列包含来自联接表的数据。数据已正确检索,但问题是列未转换为正确的JSON。 如您所见,最后有点“切”。 我也尝试过,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗? 更新 问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一

  • 问题内容: 我刚遇到getResourceAsStream()一个非常奇怪的问题。 在我的产品项目JUnit测试中,我使用getResourceAsStream()读取测试数据,我发现getResourceAsStream()有时会替换一些字节: 在此项目中的输出如下所示: D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1

  • 我正在使用passport-local和express-session,但我的问题是,当我输入一个地址,关闭会话后,我得到的问题浏览器“页面不正确重定向”,所以我想做的是重定向到地址/登录,而不是显示那个问题 我会留下我的密码 Routes.js 应用程序JS 更新已解决 我在app.get call中调用的函数所做的验证 函数isLoggedIn(req,res,next){ If(req.is

  • 相对新的节点。js,尝试从Angular2获取一个js对象到我的节点。js路由,但我总是从本机对象解析器获得一个标准的“索引0处的意外标记”。 对象很好地到达我的节点工厂,但在发布到路由时失败。 这是被发送到路由的JSON: 这是我在开发人员控制台中收到的错误。 angular2.dev.js:23083异常:语法错误:位置0BrowserDomA的JSON中的意外令牌Sdapter.log错误@