2012-08-09 3 views
0

브라우저에 JSON 형식을 보내려합니다. 하지만 그것은 broweser 플러스 req.write 부분과 같은 오류가 발생하지 않을 것 같습니다. 액세스 URL은 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

같은 유일한 방법으로 Response.End()를 사용할 수 있습니다 http://jslint.com/과 당신이 누락 된 것을 보여줄 것입니다. 처음에는 이름 값 쌍의 모든 이름이 주위에 큰 따옴표가 있어야합니다. – scrappedcola

+6

'JSON.stringify (returnJSON)''res.write'를 호출하기 전에 문자열로 인코딩해야 할 것 같습니다 –

+0

@ S.Albano가 정확합니다. http 서버는 javascript 객체를 자동으로 json으로 변환하지 않습니다. 수동으로 인코딩해야합니다. 나는 그것이 OP가 무엇인지에 관해 그 질문에 대한 대답으로 그것을 제출할 것이다. @draford, 당신도'res.end()'가 없습니다. 전화하지 않으면 서버가 연결을 종료하지 않습니다 (브라우저에서 시간이 초과 될 때까지). – travis

답변

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(); 

또한, 당신은을 통해 출력을 실행

res.end(body); 
관련 문제