02.26 node.js 04 http server 初步

上一篇:

上一篇中我們的 Hello World 示例實際上已經用到了http server。考慮到操作的重要性,這一篇會先介紹http server, 後續再介紹 node.js 模塊以及 npm 包管理工具。


node.js 04  http server 初步


創建http server

與其他服務端編程工具不一樣的地方在於,node.js可以在程序中直接創建Http Server, 而不需要單獨安裝。

const http = require('http')

http.createServer(function (request, response) {

}).listen(8081);

在上面的代碼中,一個Http Server就創建完成了。首先需要引入http模塊,然後調用http模塊中的createServer方法即可。

在createServer方法中有一個參數function(request, response),該參數為回調函數,對於瀏覽器發送過來的request的處理邏輯就在該函數中。

代碼的末尾是Http Server的監聽端口,這裡我們使用了8081端口,和java Tomcat的8080端口區別開來。當然也可以使用其他端口。

如果把上面的代碼與Java服務段代碼相比,確實會簡便很多,也不需要安裝Tomcat或者Jetty作為Servlet Engine。Java服務端框架SpringBoot也做了改動,整合了ServletEngine, 也可以通過簡捷代碼快速處理http 請求。整體而言,node.js還是輕量快速很多。

處理http請求

對於request對象中包含了很多屬性,重要的有以下一些

  • method: http請求方法,包括GET, POST, PUT, DELETE。與其他服務端語言對比,沒有區別,都是對於http請求的建模。
  • url: 這個屬性包括客戶端發送的url以及後面的參數。這點,後面會有章節詳細介紹,如何提取url中的參數。
  • headers:是對http請求頭部的封裝,包含cookie,瀏覽器等信息
  • httpVersion:HTTP版本信息。

在我們本節的例子中,對於request中的任意url, 我們可以返回默認的頁面。

發送服務端響應 response

  • 首先需要發送響應頭信息

包括statusCode狀態碼,例如200表示服務請求成功。還包括content-type,用於指定內容類型,通常為"text/html",也可以在其中包含charset字符集。

response.writeHead(200, {'Content-Type': 'text/html;charset="utf-8"'});


響應頭中還可以設定location,content-disposition,content-length,set-cookie,expires等等。這點和大部分服務端語言所提供的功能類似。

  • 寫入響應內容

response.write('

')
response.write('你好,內容信息
')

通過response.write()進行響應內容的設置,也就是返回給客戶端的html頁面中的內容。

第一行是為了與上面的http響應頭中的字符集相對應,在html的head中也作了charset的設定。

  • 結束響應

在寫入響應內容後,需要添加下列代碼來結束響應。否則瀏覽器會一直顯示在刷新。

response.end()

到這裡一個http請求的處理就完成了。

整體代碼如下:

const http = require('http')

http.createServer(function (request, response) {

response.writeHead(200, {'Content-Type': 'text/html;charset="utf-8"'});

response.write('

')

response.write('你好,內容信息
')

response.end()

}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');

在命令行中直接運行該.js就可以了。

下一篇:


分享到:


相關文章: