【发布时间】:2014-04-30 03:11:38
【问题描述】:
假设我要返回 JSON 内容
var content = {
a: 'foo',
b: 'bar'
};
返回 JSON 数据的最佳做法是什么?
A) 按原样返回对象;即res.end(content)?
B) JSON.stringify(content) 然后在客户端调用JSON.parse(content)?
【问题讨论】:
假设我要返回 JSON 内容
var content = {
a: 'foo',
b: 'bar'
};
返回 JSON 数据的最佳做法是什么?
A) 按原样返回对象;即res.end(content)?
B) JSON.stringify(content) 然后在客户端调用JSON.parse(content)?
【问题讨论】:
如果您使用 express 的res.json 发送响应,您可以将对象直接发送为application/json 编码响应。
app.get('/route/to/ressource', function(req, res){
var oMyOBject = {any:'data'};
res.json(oMyOBject);
});
【讨论】:
res.send()已经完成了stringify的工作,无论你做什么,客户端都会收到JSON格式的数据。
.send会帮你设置,如果你想要格式化输出,你可以设置app.set('json spaces', '\t')。
客户端必须始终发送一个字符串。这就是协议所说的。毕竟,HTTP 是一个范围广泛的协议,并非所有语言都支持 JSON 对象,更不用说 JavaScript 数据了。
如果您不将其转换为 JSON 字符串,纯 Node 很可能只会将其发送为 [object Object],我确定这不是您的意图。
如前所述,Express 允许您发送一个实际的 JS 对象,并为您进行 JSON 字符串转换。或者,您可以手动转换它。
【讨论】:
res.json() 在内部进行转换?另外,如果我从服务器发送一个字符串,我会在浏览器上要求JSON.parse(data)?
$.getJSON() 方法,它也会在内部执行 JSON.parse()。