express
express概念:express是基於nodejs的HTTPS模塊構建出來的一個web應用開發框架,在nodejs之上擴展了 Web 應用所需的基本功能。
本質上express應用就是調用各種中間件。
中間件:一個處理某個功能或模塊的函數,一箇中間件對應一個要處理的小任務。
功能:
1、修改請求和響應對象
2、終結請求-響應循環
3、調用堆棧中的下一個中間件。
示例:
var express=require("express") //引入express框架
var app = express() //創建app應用
//app.use() 調用中間件
//如果中間件沒有掛載點,無論什麼請求都會執行該代碼
app.use(function(req,res,next){
console.log(req.cookie);
next();
})
// '/admin/:id'是掛載點,當要請求這個路徑,就會執行下面的代碼 一箇中間件棧必須要調用終止請求-響應循環方法
app.use('/admin/:id',function(req,res,next){
console.log(req.user.id);
next();
},function(req,res,next){
res.end(req.params.id); // 執行結束方法終止請求-響應循環,(end(),send()..都可以終止)
})
// 同一個掛載點,這個永遠不會被調用
app.use('/admin/:id',function(req,res,next){
res.send('User Info');
})
中間件五大類:
1、應用級中間件
2、路由級中間件
3、錯誤處理中間件
4、內置中間件
5、第三方中間件
應用級中間件:綁定到app對象上的中間件(app.use()或app.method()),以上示例都是應用級中間件
路由級中間件:綁定到express.Router()對象上的中間件
以上示例改一下就變成路由級
var express=require("express")
var app = express()
var router = express.Router()
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// 將路由掛載至應用
app.use('/', router);
路由級中間件和應用級中間件的區別是:
當var app=express()的時候就已經創建了一個application,在application內部就創建了一個Router,大部分對application的操作實際上被重定向到Router了。
例子:
app.use() 相當於 app._router.use()
所以application是Router的封裝,Router纔是核心
錯誤處理中間件:有4個參數(err,req,res,next)
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
內置中間件:express.static 是 Express 唯一內置的中間件。
將靜態資源文件所在的目錄作爲參數傳遞給 express.static 中間件就可以提供靜態資源文件的訪問
app.use('/public',express.static('public'));
第三方中間件:
安裝並加載一個解析 cookie 的中間件: cookie-parser
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
// 加載用於解析 cookie 的中間件
app.use(cookieParser());
總結:中間件是一個處理函數
歡迎指正!