上一篇:
上一篇中我們的 Hello World 示例實際上已經用到了http server。考慮到操作的重要性,這一篇會先介紹http server, 後續再介紹 node.js 模塊以及 npm 包管理工具。
創建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就可以了。
下一篇:
閱讀更多 IT人Vincent 的文章