2012-08-09 58 views
0

我想发送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格式是错误的。 谢谢。

+1

贯穿你的输出:http://jslint.com/它会告诉你你错过了什么。对于初学者来说,名称值对中的所有名称都需要在它们周围加双引号。 – scrappedcola 2012-08-09 21:01:26

+6

'JSON.stringify(returnJSON)'看起来你需要在调用'res.write'之前将它编码为字符串。 – 2012-08-09 21:03:18

+0

@ S.Albano是正确的,http服务器不会自动将javascript对象转换为json。你必须手动编码它们。我会把这个问题作为对OP问题的回答。 @draford,你也错过了'res.end()'。如果不调用它,服务器将永远不会关闭连接(直到浏览器发生超时)。 – travis 2012-08-09 21:55:50

回答

0

您可能需要向客户端发送正确的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); 
相关问题