【nodeJs】koa中介軟體的基本用法
阿新 • • 發佈:2019-01-22
一、什麼是Koa的中介軟體
通俗的講:中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以把它叫做中介軟體。
在express中介軟體(Middleware) 是一個函式,它可以訪問請求物件(request object (req)), 響應物件(response object (res)), 和 web 應用中處理請求-響應迴圈流程中的中介軟體,一般被命名為 next 的變數。
中介軟體的功能包括:
執行任何程式碼。
修改請求和響應物件。
終結請求-響應迴圈。
呼叫堆疊中的下一個中介軟體。
如果回撥函式中,沒有next引數,那麼匹配上第一個路由,就不會往下匹配了。如果想往下匹配的話,那麼需要寫next()
二、Koa應用可使用如下幾種中介軟體:
應用級中介軟體
路由級中介軟體
錯誤處理中介軟體
第三方中介軟體
1.應用級中介軟體
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
app.use(async (ctx,next)=>{
console.log(new Date());
await next();
})
router.get('/', function (ctx, next) {
ctx.body="Hello koa" ;
})
router.get('/news',(ctx,next)=>{
ctx.body="news頁面"
});
app.use(router.routes()); //作用:啟動路由
app.use(router.allowedMethods()); //作用: 當請求出錯時的處理邏輯
app.listen(3000,()=>{
console.log('starting at port 3000');
});
2、路由中介軟體
router.get('/', async(ctx, next)=>{
console.log(1)
next(); //傳遞給下一個中介軟體
})
router.get('/', function (ctx) {
ctx.body="Hello koa";
})
3、錯誤處理中介軟體
app.use(async (ctx,next)=> {
await next();
if(ctx.status==404){
ctx.body="這是一個404頁面";
}
});
4、第三方中介軟體
const static = require('koa-static');
const staticPath = './static';
app.use(static(path.join( __dirname, staticPath)))
const bodyParser = require('koa-bodyparser');
app.use(bodyParser());
三、Koa中介軟體的執行順序
Koa 的中介軟體和 Express 不同,Koa 選擇了洋蔥圈模型。 如下圖:
可以通過一個例子來理解洋蔥模型:
const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');
const router = new Router();
app.use(async (ctx, next) => { //匹配任何路由的中介軟體
console.log('<1');
next();
console.log('1>');
})
app.use(async (ctx, next) => {
console.log('<2');
next();
console.log('2>');
})
app.use(async (ctx, next) => {
console.log('<3');
next();
console.log('3>');
})
router.get('/', async ctx=> {
ctx.body = 'hello World';
})
app
.use(router.routes()) //啟動路由
.use(router.allowedMethods()); //自動幫你設定響應頭
app.listen(3000, function () {
console.log('server start at 3000');
});
請求localhost:3000可以看到控制檯的訊息: