为什么它不会返回JSON到浏览器
问题描述:
我想发送JSON格式的浏览器来显示。 但它似乎不会浏览器加上有像req.write部分的错误。 访问网址是127.0.0.1:3000/media=video 我可以访问服务器,但它不会返回JSON到浏览器。为什么它不会返回JSON到浏览器
var http = require('http');
var recommandCat=['top5','newest','like','random','recommened'];
var url =require('url');
http.createServer(function (req, res) {
var url_parts = url.parse(req.url, true);
var query = url_parts.query;
var returnJson="";
console.log(query.media);
switch (query.media)
{
case 'photo':
returnJson=photoGenerator();
break;
case 'video':
returnJson=videoGenerator();
break;
case 'audio':
returnJson=audioGenerator();
}
console.log(returnJson);
res.write(returnJson);
}).listen(3000, '127.0.0.1');
function videoGenerator()
{
var jsonArray = new Array();
for(i=0;i<10;i++)
{
var data = new Object();
var recoCat = recommandCat[Math.floor(Math.random()*4)];
data = {
tomEngine:{
mediaType:"video",
recommendset:[
{recommendCat:"+recoCat+",
recommendResult:[
{
mediaId:"",
mediaEntry:[{
user1:{
name:"sooin",
rating:"3",
views:"2",
like:"ture",
comment:"good"
},
user2:{
name:"sara",
rating:"1",
views:"4",
like:"ture",
comment:"good!"
}
}],
view:"4",
rating:"4",
like:"10",
attribute:{
smallUrl:"www",
largeUrl:"llll",
title:"aaaa"
},
}]
}
]
}
};
jsonArray.push(data);
}
return jsonArray;
}
也许我的json格式是错误的。 谢谢。
答
您可能需要向客户端发送正确的Content-Type标题。 也response.end() should be called in the end of each response。
var body = JSON.stringify(returnJson);
res.writeHead(200, {
'Content-Length': body.length,
'Content-Type': 'application/json'
});
res.write(body);
res.end();
此外,如果您回应的身体不是分块,你只能使用到Response.End方法()一样
res.end(body);
贯穿你的输出:http://jslint.com/它会告诉你你错过了什么。对于初学者来说,名称值对中的所有名称都需要在它们周围加双引号。 – scrappedcola 2012-08-09 21:01:26
'JSON.stringify(returnJSON)'看起来你需要在调用'res.write'之前将它编码为字符串。 – 2012-08-09 21:03:18
@ S.Albano是正确的,http服务器不会自动将javascript对象转换为json。你必须手动编码它们。我会把这个问题作为对OP问题的回答。 @draford,你也错过了'res.end()'。如果不调用它,服务器将永远不会关闭连接(直到浏览器发生超时)。 – travis 2012-08-09 21:55:50