1. 程式人生 > 實用技巧 >node.js 二

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 ) );