2014-05-02 35 views
1

這是我的一個名爲serverpaths.js無法獲取node.js程序的輸出?

var http = require("http"); 
var url = require("url"); 
function start() { 
function onRequest(request, response) { 
var pathname = url.parse(request.url).pathname; 
console.log("Request for " + pathname + " received."); 
response.writeHead(200, {"Content-Type": "text/plain"}); 
response.write("Hello World"); 
response.end(); 
} 
http.createServer(onRequest).listen(8888); 
console.log("Server has started."); 
} 
exports.start = start; 

這裏第一個文件是我的第二個文件名爲router.js

function route(pathname) { 
console.log("About to route a request for " + pathname); 
} 
exports.route = route; 

這是我的第三個文件命名爲index1.js

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

輸出應該是

Server has started 
Request for /foo received. 
About to route a request for /foo 

但我得到的輸出

Server has started 
Request for /foo received 

我不知道我爲什麼不從路由器About to route a request for /foo.

回答

0

得到輸出你需要調用您通過功能到某個時候你的開始功能。

var http = require("http"); 
var url = require("url"); 

function start(route) { 
    function onRequest(request, response) { 
    var pathname = url.parse(request.url).pathname; 
    console.log("Request for " + pathname + " received."); 
    route(pathname); 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello World"); 
    response.end(); 
    } 
    http.createServer(onRequest).listen(8888); 
    console.log("Server has started."); 
} 

exports.start = start; 
+0

感謝的人是worked.actually我在node.js的一個新手,所以只是最後一個問題server.start(router.route)後';'怎麼流將首先運行,它會調用'start'或你可以簡單地解釋流程。我明白每一行都在做什麼,但無法理解實際流程。 – Fresher

+0

'server.start(router.route)'行不會調用router.route函數。它只是將它作爲參數傳遞給server.start函數。然後你可以調用server.start中的函數。 – Brett

+0

在這種簡單的情況下,你也可以在serverpaths.js中執行'var router = require('./ router');'然後在需要時調用'router.route(pathname)'。 – Brett