node.js 二
一、node建立web伺服器
1、引入系統模組,用於建立網路伺服器的模組
const http = require(' http ');
2、建立網路伺服器物件
const app = http.createServer();
3、當客戶端有請求來的時候
app.on(' request ', (req, res) =>{
//響應
res.end(' <h1>hellow</h1> ');
})
4、監聽對口,習慣性監聽3000埠,別的埠也行
app.listen(3000);
console.log('伺服器已啟動,監聽3000埠,請訪問localhost:3000 ');
二、req 和 res 的一些方法和屬性
1、req.url : 獲取請求地址
預設是 ' / '
2、req.headers : 獲取請求報文的資訊
3、req.method : 獲取請求的方法
4、設定http狀態碼
res.writeHead() ——> 預設不寫是200,
res.writeHead( 400 ) ——> 設定狀態碼為400
5、writeHead()方法有兩個引數,引數一是設定響應狀態碼,引數二是一個物件,用來設定響應頭資料
如:res.writeHead(200, {
'Content-Type' : ' text/plain '
})
// content-type是響應型別,text / plain 表示為純文字,預設值
文字的型別有:
6、設定字符集編碼,預設中文在瀏覽器會顯示亂碼
res.writeHead(200, {
'Content-Type' : ' text/html;charset=utf8 '
})
// 設定了響應型別為html型別,字符集編碼為utf-8
三、http請求與響應處理
客戶端向服務端傳送請求時,有時候需要帶一些引數,那node如何獲取這些引數呢?
1、GET請求
請求引數被放置在瀏覽器的位址列中,例如:http://localhost:3000/?name=zhangsan&age=30
獲取get傳送的引數需要藉助系統模組url,url模組用力啊處理url地址
(1)//匯入url系統模組用於處理url地址
const url = require(' url ');
//url有個parse方法可以解析url地址, 先在node裡面打印出看看
app.on(' request ', (req, res)=>{
console.log( url.parse(req.url) );
})
輸入的地址 :
node裡的列印結果
可以看到返回的是一個物件,屬性query裡面是 ? 後面的引數,也就是get穿進去的引數,
pathname是訪問的地址
(2)、但是獲得的引數是字串形式,想要得到物件形式的引數又該怎麼辦呢??
其實url.parse() 還有第二個引數,設定為true, query裡面的值會轉換成物件形式顯示
url.parse( req.url, true );
此時我們就可以獲取到傳入的引數了
let { name, age } = url.parse( req.url, true ).query;
2、POST請求
請求引數被放置在請求體中進行傳輸
獲取POST請求需要用到data事件和end事件
(1)建立一個html檔案,在裡面寫個form表單來發送post請求
<form action="http://localhost:3000" method="post"> <input type="text" name="username"> <input type="text" name="password"> <input type="submit" value="請求"> </form>
const http = require('http'); // const querystring = require('querystring'); const app = http.createServer(); app.on('request', (req, res)=>{ // 建立一個用來存放post引數的變數 let postparams = ''; // 監聽引數傳輸事件 req.on('data', params => postparams += params); // 監聽引數傳輸完畢事件 req.on('end', ()=> { //console.log(querystring.parse(postparams));
// 引數傳入結束後,列印傳入的post引數 console.log(postparams); }) res.end('ok'); }) app.listen(3000);
在node中打印出傳入的post引數
(2)、打印出來又是一個字串,那怎麼才能把它專為物件格式呢
node提供了一個內建系統模組querystring,專門用於將http引數轉為物件格式
const querystring = require(' querystring ');
querystring.parse(' http的引數 ')
在引數傳輸完畢後,console.log( querystring.parse( postparams ) );