上節(jié)課我解釋了客戶端如何發(fā)起請求到服務(wù)端弥鹦,還有服務(wù)器端如何響應(yīng)請求給客戶端戏挡。這節(jié)課開始使用 Node.js 來創(chuàng)建屬于自己的服務(wù)器固逗,然后從客戶端發(fā)起請求到服務(wù)器并讓其響應(yīng)請求。
如何創(chuàng)建服務(wù)器呢拘领?超級簡單意乓,只需要使用 Node.js 內(nèi)置的 http
模塊。
var http = require('http');
我們可以使用 http
模塊里的方法來創(chuàng)建服務(wù)器
- 使用
createServer
方法創(chuàng)建服務(wù)器 - 每當(dāng)接收到請求就會執(zhí)行
createServer 里的回調(diào)方法
约素,而處理請求與響應(yīng)請求則在回調(diào)方法中進(jìn)行- 參數(shù)
req
是裝載了來自客戶端請求詳細(xì)信息的對象 - 參數(shù)
res
則是我們可以響應(yīng)給客戶端的對象
- 參數(shù)
var http = require('http');
var server = http.createServer(function(req, res){
});
頭部信息
響應(yīng)請求之前我們聊聊頭部信息届良,當(dāng)響應(yīng)請求的時候,除了響應(yīng)數(shù)據(jù)外我們還會響應(yīng)
頭部信息
圣猎,而發(fā)送請求會則帶上請求頭士葫。你可以認(rèn)為頭部信息是一種請求或響應(yīng)信息的額外信息,如 html 頁面的 head 塊不需要顯示送悔,卻能讓瀏覽器了解 html 文檔的更多信息慢显。
我們可以放這些東西到頭部信息里:
-
Content-Type
瀏覽器所期待內(nèi)容的類型,可能是純文本欠啤,HTML荚藻,JSON,根據(jù)不同的類型會有不同的處理方法 -
Status
狀態(tài)碼- 200 是所有都正常
- 404 頁面找不到
繼續(xù)跪妥,先創(chuàng)建響應(yīng)頭
然后提供響應(yīng)的信息
-
創(chuàng)建響應(yīng)頭
的方法writeHead
- 第一個參數(shù)是狀態(tài)鞋喇,下例為200
- 第二個參數(shù)是一個對象声滥,里面添加
Content-Type
眉撵,下例為純文本
然后可以
響應(yīng)內(nèi)容
到客戶端,使用end
方法落塑,這樣我們就響應(yīng)了頭部信息與內(nèi)容
var http = require('http');
var server = http.createServer(function(req, res){
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Hello world');
});
現(xiàn)在用客戶端發(fā)送請求還是未能正常工作纽疟,因為我們沒有指定端口號
。記得嗎憾赁,上節(jié)課有提到我們可以讓 Node.js 監(jiān)聽某個端口的請求污朽,因此發(fā)送請求前,我們先處理監(jiān)聽的動作龙考。
'app.js'
var http = require('http');
var server = http.createServer(function(req, res){
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Hello world');
});
server.listen(8888, '127.0.0.1'); // 監(jiān)聽本機(jī)上的 8888 端口
console.log('server is listening 8888');
好蟆肆,這就是服務(wù)器相關(guān)的配置,現(xiàn)在只要在命令行運行 node app.js
就會看到命令行輸出
server is listening 8888
然后在瀏覽器地址欄上輸入 '127.0.0.1:8888'晦款,瀏覽器則會顯示 Hello world
炎功,就是服務(wù)器返回的內(nèi)容
打開瀏覽器開發(fā)者工具控制臺里的網(wǎng)絡(luò)面板
,重新刷新一次頁面可以在里看到請求缓溅,點擊該請求能看到有請求與響應(yīng)面板蛇损,響應(yīng)面板里能看到 Status
與 Content-Type
。
只要瀏覽器地址上輸入 '127.0.0.1:8888',無論后面加什么('127.0.0.1:8888/index.html')都是響應(yīng)這個內(nèi)容淤齐,實際上我們需要通過 URL 來區(qū)分響應(yīng)內(nèi)容股囊,這個在接下來的課程會繼續(xù)討論。
額外加點東西更啄,我們可以在請求對象里獲取一些信息稚疹,如請求的 url
var http = require('http');
var server = http.createServer(function(req, res){
console.log(req.url); // 輸出客戶端輸入的 url 地址
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Hello world');
});