nodeJs 入門 ---1

來源:互聯網
上載者:User

標籤:

1.分析http伺服器

 

var http = require("http");http.createServer(function(request, response) {  response.writeHead(200, {"Content-Type": "text/plain"});  response.write("Hello World");  response.end();}).listen(8888);

第一行請求(require)Node.js內建的 http 模組,並且把它賦值給 http 變數。

接下來我們調用http模組提供的函數: createServer 。這個函數會返回一個對象,這個對象有一個叫做 listen 的方法,這個方法有一個數值參數,指定這個HTTP伺服器監聽的連接埠號碼。

2.基於事件驅動的回調

nodejs基於事件驅動

當我們使用 http.createServer 方法的時候,我們當然不只是想要一個偵聽某個連接埠的伺服器,我們還想要它在伺服器收到一個HTTP請求的時候做點什麼。

問題是,這是非同步:請求任何時候都可能到達,但是我們的伺服器卻跑在一個單進程中。

寫PHP應用的時候,我們一點也不為此擔心:任何時候當有請求進入的時候,網頁伺服器(通常是Apache)就為這一請求建立一個進程,並且開始從頭到尾執行相應的PHP指令碼。

那麼在我們的Node.js程式中,當一個新的請求到達8888連接埠的時候,我們怎麼控制流程程呢?

嗯,這就是Node.js/JavaScript的事件驅動設計能夠真正幫上忙的地方了——雖然我們還得學一些新概念才能掌握它。讓我們來看看這些概念是怎麼應用在我們的伺服器代碼裡的。

我們建立了伺服器,並且向建立它的方法傳遞了一個函數。無論何時我們的伺服器收到一個請求,這個函數就會被調用。

我們不知道這件事情什麼時候會發生,但是我們現在有了一個處理請求的地方:它就是我們傳遞過去的那個函數。至於它是被預先定義的函數還是匿名函數,就無關緊要了。

這個就是傳說中的 回調 。我們給某個方法傳遞了一個函數,這個方法在有相應事件發生時調用這個函數來進行 回調 。

var http = require("http");function onRequest(request, response) {  console.log("回呼函數執行");  response.writeHead(200, {"Content-Type": "text/plain"});  response.write("Hello World");  response.end();}http.createServer(onRequest).listen(8888);console.log("伺服器開始工作");

 

  當運行node server.js時,會馬上輸出   ‘伺服器開始工作’,當我們向伺服器發送請求(訪問localhost:8888),就會輸出“回呼函數執行”,這就是事件驅動的非同步伺服器端JavaScript和它的回調啦!

(請注意,當我們在伺服器訪問網頁時,我們的伺服器可能會輸出兩次“回呼函數執行”。那是因為大部分伺服器都會在你訪問 http://localhost:8888 /時嘗試讀取 http://localhost:8888/favicon.ico )

3.伺服器如何處理請求

當回調啟動,我們的 onRequest() 函數被觸發的時候,有兩個參數被傳入:request 和 response 。

它們是對象,你可以使用它們的方法來處理HTTP請求的細節,並且響應請求(比如向發出請求的瀏覽器發回一些東西)。

所以我們的代碼就是:當收到請求時,使用 response.writeHead() 函數發送一個HTTP狀態200和HTTP頭的內容類型(content-type),使用 response.write() 函數在HTTP相應主體中發送文本“Hello World"。

最後,我們調用 response.end() 完成響應。

4.服務端的模組應該放在那裡

我們現在就來談談怎麼把server.js變成一個真正的Node.js模組,使它可以被我們(還沒動工)的 index.js 主檔案使用。

node.js使用exports和require對象來解決對外提供介面和引用模組的問題。

我們把我們的伺服器指令碼放到一個叫做 start 的函數裡,然後我們會匯出這個函數。

var http = require("http");function start() {  function onRequest(request, response) {    console.log("回呼函數執行");    response.writeHead(200, {"Content-Type": "text/plain"});    response.write("Hello World");    response.end();  }  http.createServer(onRequest).listen(8888);  console.log("開始");}exports.start = start;

  這樣,我們現在就可以建立我們的主檔案 index.js 並在其中啟動我們的HTTP了,雖然伺服器的代碼還在 server.js 中。

建立 index.js 檔案並寫入以下內容:

var server = require("./server");server.start();

  注意:index.js和 server.js 是放在同一目錄下,雖然"./server"這麼寫,

exports.start = start;介面
var server = require("./server"); 引入

 

 

 

nodeJs 入門 ---1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.