2016-12-29 49 views
0

我需要一些關於下面的語法和正在執行的代碼的順序的說明。npm http和語法解釋

我第一次猜測它開始與創建服務器

var server = http.createServer(handleRequest);

然後server.listen功能被執行的。

但是在瀏覽器上,當用戶在諸如'/'的路徑上結束時,從哪裏調用handleRequest函數以及什麼返回並存儲在var server中。並且是.listen部分server.listen部分npm http包就像createServer是?

// Here we require/import the HTTP module 
var http = require("http"); 

// Here we define a port to listen to 
var PORT = 8080; 

// Here we create a generic function to handle requests and responses 
function handleRequest(request, response) { 

    // The below statement is triggered (client-side) when the user visits the PORT URL 
    response.end("It Works!! Path Hit: " + request.url); 
} 

// Here we use the Node HTTP package to create our server. 
// We then pass it the handleRequest function to empower it with functionality. 
var server = http.createServer(handleRequest); 

// Here we start our server so that it can begin listening to client requests. 
server.listen(PORT, function() { 

    // The below statement is triggered (server-side) when a user visits the PORT URL 
    console.log("Server listening on: http://localhost:%s", PORT); 

}); 
+0

我知道這並沒有回答這個問題,但'http'模塊是Node內核的一個內置模塊,沒有必要用npm – sebasaenz

回答

0

HTTP模塊是模塊直接內置到節點。 createServer()返回一個服務器實例,該實例有一個名爲listen的方法。這基本上爲request事件設置了一個事件監聽器。當傳入請求時,HTTP其引導至handleRequest()功能

0

http是節點(docs)的一部分,只是默認不加載的,所以我們必須要求它。

var server = http.createServer(handleRequest)使得新http.Server實例,設置變量server來引用實例,它只是做,它告訴路由到功能handleRequest任何請求。

server.listen(PORT)使用創建http.Server實例並調用其偵聽方法與端口號相等的任何PORT,告訴server偵聽指定的端口。所以.listenhttp模塊

每當server得到的請求,就像你去http://localhost:8080/它調用handleRequest有兩個參數的部分,第一個是要求,第二個是我們可以寫入響應。 handleRequest從它給出的請求參數中獲取URL,然後向響應參數寫入一個字符串加上url並結束有效發送響應的響應。

+0

安裝它。謝謝你的解釋。它開始變得更加清晰。當handleRequest函數作爲參數傳遞給http.createServer時,它會成爲該實例的屬性,作爲我猜測的回調函數的服務器,以便每當發出請求時,都會調用回調函數handleRequest? – henhen

+0

@anonymous如你所說,'handleRequest'就像是一個回調,它是異步的。因此,服務器等待請求,然後無論何時向該服務器實例發出請求,它都會調用requestListener(requestData,responseData)(注意requestListener來自文檔[http.createServer docs](https:// nodejs。 org/api/http.html#http_http_createserver_requestlistener)。requestData和responseData只是隨機的名字來表示數據被調用的函數),在這種情況下它是'handleRequest'。 – armyf35