2014-01-22 4 views
0

NodeJS 서버와 라우터를 만들기 위해 웹에서 예제를 따라했지만 문제가 발생했습니다. 다음은 주로 다른 코드가있는 예제입니다.NodeJS를 사용하기위한 기본적인 시도

하는 index.js

var server = require("./server"); 
var router = require("./router"); 
server.start(router.route);' 

Router.js

var fs = require("fs"); 

function route(filename) { 
    fs.readFile(filename, 'utf8', function (err, data) { 
     if (err) { 
     console.log('Error: ' + err); 
     return; 
     } 
     console.log("About to route a request for " + filename); 
     data = JSON.parse(data); 

    }) 
} 
exports.route = route; 

Server.js

내가 가진 문제는
var http = require('http'); 
var url = require("url"); 


function start(route) { 

    function onRequest(request, response) { 
     var filename = request.url.substr(1); 
      // call for specific json file here 
     if (filename == "favicon.ico") { 
      response.writeHead(200, {'Content-Type': 'image/x-icon'}); 
      response.end(); 
      console.log('favicon requested'); 
      return; 
     } 
     else { 
      filename += ".json";    
      console.log("Request for " + filename + " received."); 

      response.writeHead(200, { 'Content-Type': 'application/json', "Access-Control-Allow-Origin":"*" }); 
      response.write("" + route(filename),0,4); 
      response.end(); 
     } 
    }  

http.createServer(onRequest).listen(8124); 
}  

exports.start = start; 
console.log('Server running at http://127.0.0.1:8124/'); 

, 다른 사람의 사이에서, 어떻게 route 명령 작동합니까? 서버를 탐색 할 때 '정의되지 않음'입니다. 라우터에서 실제 json을 얻으려면 어떻게해야합니까?

시도 : var result = route (filename); 그러나 그것은 나쁘게 실패했다.

본질적으로 라우터에서 데이터를 가져 와서 응답에 쓰는 방법. 짐작하지 못했다면, javascript와 NodeJS는 나에게 새로운 것이다.

모든 포인터가 크게 감사하겠습니다.

감사합니다.

답변

0

경로 기능에 비동기 방법 인 fs.readFile이 있습니다. route 함수에 대한 콜백을 전달해야 데이터를 올바르게 반환 할 수 있습니다. 그렇지 않으면 routereadFile 안에 return 문이 있는지 상관없이 데이터가 없으면 (비동기식이므로) 즉시 반환됩니다.

router.js

function route(filename, callback) { 
    fs.readFile(filename, 'utf8', function (err, data) { 
     if (err) { 
      console.log('Error: ' + err); 
      return; 
     } 
     console.log("About to route a request for " + filename); 
     data = JSON.parse(data); 
     callback(data); // Call this function after the data is grabbed. 
    }) 
} 

server.js 부분 :

response.writeHead(200, { 'Content-Type': 'application/json', "Access-Control-Allow-Origin":"*" }); 
route(filename, function (data) { 
    response.write("" + JSON.stringify(data),0,4); 
    response.end(); 
}); 
+0

고마워요! 그것은 엄청난 개선입니다. 별로 문제가되지 않지만 유일한 것은 실제 정보 대신 실제 데이터 유형 [object Object]에 대한 응답을 얻는 것입니다. 어떻게 해결할 수 있을까요? – sum1nil

+0

@ sum1nil이라면'JSON.stringify' 만 호출하면됩니다. 그렇지 않으면 데이터에 포함될 속성 (예 :'data.ID')을 호출 할 수 있습니다. server.js 부분을 업데이트했습니다. – matth