nodejs-2.http服務


 一.使用nodejs的http服務:處理 "請求或響應" 數據

要使用 HTTP 服務器與客戶端,需要 require('http')

Node.js 中的 HTTP 接口被設計成支持協議的許多特性。 比如,大塊編碼的消息。 這些接口不緩沖完整的請求或響應,用戶能夠以流的形式處理數據。//引入 http 模塊

//引入內置模塊 http 
var http = require('http'); //創建服務 var server = http.createServer(function(req, res){
    //req 是封裝好的請求對象
    //res 是封裝好的相應對象
    res.end('first http server ok'); 
});

//監聽端口

server.listen(8080);

 

 

二.http服務:請求報文和響應報文

1.http協議(請求和響應)包括三部分:請求行、請求頭、請求體

2.請求報文格式: 客戶端向服務器發送的內容

(1) 請求行  GET  /?a=1  HTTP/1.1
(2) 請求頭 

    Host: localhost:8080

    User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 
    ... ...

(3) 請求體

注:get方式會把請求參數拼接在請求行中;

       post方式則把請求參數放在請求體中

3.響應報文 :服務器給客戶端瀏覽器返回的結果

(1) 響應行    HTTP/1.1 200 OK

    注:響應狀態碼 (狀態碼很靈活,可以自定義)

      2xx 成功

      3xx 跳轉的

      4xx 問題     ----->  公益 404 https://yibo.iyiyun.com/
      5xx 內部錯誤

//設置響應狀態碼  // res.statusCode = 200;
 res.statusCode = 302;

 

(2)響應頭:作用是告知客戶端瀏覽器內容的格式和字符集

res.setHeader('content-type','text/html;charset=utf-8');
//響應頭 `content-type` 作用是告知客戶端瀏覽器內容的格式和字符集
//格式:
//text/html
//text/css
//text/plain

(3)響應體

☆瀏覽器頁面中通過右鍵查看源代碼看到的內容就是 *響應體*

// 響應體 : //響應數據可以放在res.write(),也可以放在res.end(),但一定要有res.end()否則數據響應完后后還在處理中。
 res.write('我是響應體哦!!!'); res.end();
//res.end 方法中必須傳遞字符串參數, 數字也不行

 

                

 

三、http服務:請求方法和響應方法

1.請求方法

(1) 請求 req

(2) 請求方法 req.method

(3) 請求路徑 req.url

(4) 請求版本 req.httpVersion

(5) 請求頭 req.headers

(6) 請求參數    require('url').parse(req.url, true).query

(7) 路由參數別名占位:id   req.params.id

(8) 正則匹配的參數    使用()形成子組件,再用 req.params[0] 獲取

var express = require('express'); var app = express(); var urlTool = require('url'); app.use(express.static('public'));// static 靜態的 靜態資源 html css js image

//路由 //請求
app.get('/request', function(req,res){ //請求方式
    var method = req.method; var url = req.url; var version = req.httpVersion; var headers = req.headers; //獲取url請求參數
    var params = urlTool.parse(req.url, true).query; console.log(method); console.log(url); console.log(version); console.log(headers); console.log(params); res.end('ok'); });

//路由參數:id
app.get('/:id.html', function(req,res){
  console.log(req.params.id);
  res.end('over');
});

 

//正則匹配的參數 /user/1.html
app.get(/^\/user\/(\d+)\.(html)$/, function(req,res){
  //獲取參數
  // console.log(req.params);
  var id = req.params[0];
  console.log(id);
  res.end('user center page');
});

//監聽端口
app.listen(80);

 

2.響應方法

(1) 響應 res
(2) 狀態碼  res.statusCode
(3) 響應頭信息   res.setHeader('content-type','text/html;charset=utf-8');
(4) 響應體   res.send('iloveyou')
(5) 響應數據JSON 格式   res.json({id:100,name:'xiaohigh'})
(6) 跳轉重定向   res.redirect('/login')   res.redirect('http://www.baidu.com')
(7) 下載   res.download('./test.js')

(8) res.end();  //如果res.end()要響應數據,格式必須是字符串

var express = require('express'); var app = express(); //路由 //響應
app.get('/response', function(req,res){ //設置響應狀態碼
    res.statusCode = 200; //設置響應頭信息
    // res.setHeader('content-type','text/html;charset=utf-8');
    //響應體 send 發送
    // res.send('<span style="color:#aed">I love you very much and you???</span>');

    //json 格式的數據 是存儲在響應體中的.
    // HTTP/1.1 200 ok
    // Content-type: xxxxx
    // {"name":"xiaohigh"}
    // res.json({'name':'html5','price':20000});

    //重定向
    // res.redirect('http://www.baidu.com/s?wd=龍卷風');

    //文件下載
    res.download('./test.js'); }); //監聽端口
app.listen(8080);

☆ 跳轉重定向   res.redirect('/login')  原理圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM