【深刻淺出express】- express入門01

簡介

Express是目前流行的基於Node.js的Web開發框架,提供各類模塊,能夠快速地搭建一個具備完整功能的網站。node

中間件

說到中間件,官網對它的闡述是這樣的:web

「Express是一個自身功能極簡,徹底是路由和中間件構成一個web開發框架:從本質上來講,一個Express應用就是在調用各類中間件。」 因而可知,中間件在Express開發中的重要性,所以這裏咱們就專門來總結一下中間件。 首先來一個例子:express

app.use('/water', function(req, res, next) {
    console.log(`過濾石頭`);
    req.stone = 'too big';
    next();
})
app.use('/water', function(req, res, next) {
    console.log(`過濾沙子`);
    req.stone = 'too big';
    next();
})
app.get('/water', function(req, res) {
    console.log(req.stone); //這裏的req和上面的中間件是同一個
    res.end('water');
})
複製代碼

上面每個app.use()都是一箇中間件,若是咱們訪問/water這個路由,首先會通過上面的兩個中間件,第一個中間件給req.stone加了一個屬性,第二個中間件也給req.stone加了一個屬性,在最後/water路由裏面咱們打印一下req.stone,結果顯示的是‘too big’,因此上面兩個中間件和下面的路由共用一個req 。bash

舉個例子,若是咱們想從渾水中獲得清水,咱們須要幾步過濾,過濾沙子,過濾石頭。。。 若是訪問/water這個路由咱們就能夠獲得清水,那麼上面的幾個中間件就是過濾器,第一個是過濾石頭的,第二個是過濾沙子的。 從上面的代碼外面能夠得出幾個中間件的特色: 必須放處處理特定路由的上面 每一箇中間件的參數和他們對應的路由的參數是同一個 說了那麼多,下面外面正式說一下中間件吧!服務器

1、中間件結構

一、app.use([path],function)cookie

path:是路由的url,默認參數‘/',意義是路由到這個路徑時使用這個中間件session

function:中間件函數,這個中間件函數能夠理解爲就是function(request,response,next)app

2、中間件分類
一、內置中間件

express.static 是Express目前惟一內置的一箇中間件。用來處理靜態資源文件。框架

什麼意思了? 來run一下代碼看看函數

// index.js
var express = require('express');
var app = express();
  
app.use(express.static(__dirname + '/public'));
複製代碼
2.自定義中間件

自定義中間件就是咱們本身寫的中間件。 在上面中間件結構中,咱們知道了,中間件使用時的第二個參數是一個Function,然而,要自定義一箇中間件,就是倒騰一番這個Function,這個function有三個參數(req,res, next)

當每一個請求到達服務器時,nodejs會爲請求建立一個請求對象(request),該請求對象包含客戶端提交上來的數據。同時也會建立一個響應對象(response),響應對象主要負責將服務器的數據響應到客戶端。而最後一個參數next是一個方法,由於一個應用中可使用多箇中間件,而要想運行下一個中間件,那麼上一個中間件必須運行next()。

三、第三方中間件

有關第三方中間件,這裏咱們分析幾個比較重要和經常使用的,知道這幾個的使用,其它的也就會了。

body-parser :解析body中的數據,並將其保存爲Request對象的body屬性。

cookie-parser :解析客戶端cookie中的數據,並將其保存爲Request對象的cookie屬性

express-session :解析服務端生成的sessionid對應的session數據,並將其保存爲Request對象的session屬性

query:這個中間件將一個查詢字符串從URL轉換爲JS對象,並將其保存爲Request對象的query屬性。這個中間件在第四個版本中已經內置了無需安裝。


錯誤中間件

錯誤中間件參數有四個,放在代碼的最後面,next()若是傳了參數直接走錯誤的中間件

app.use(function(err, req, res, next) {
    console.log('err');
})
複製代碼
全匹配的中間件
app.use(function(req, res, next) {
    console.log('err');
})
複製代碼

像這種參數只有一個函數的中間件能夠匹配所有的路由

未完待續,敬請期待。。。

相關文章
相關標籤/搜索