Nodejs基础、Nodejs打在一个类似Express的框架、MongoDb的基础、Nodejs操作Mongodb、Koa2入门实战。从0到1学会Nodejs入门教程
Koajs入门视频教程在线学习地址:https://www.bilibili.com/video/BV1xm4y1c7zr/?p=1
Koajs入门视频教程网盘下载地址:https://pan.baidu.com/s/1QN_XkXRXmIw6V7HevntBQQ 提取码:abcd
一、什么是Koa的中间件
通俗的讲:中间件就是匹配路由之前或者匹配路由完成后做的一系列的操作,我们就可以把它叫做中间件。
Koa的中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res))。在 Koa中处理请求、响应循环流程的变量一般被命名为 next 变量。
如果我们的get、post回调函数中,没有next参数,那么匹配到这个路由就不会继续往下匹配了。如果想往下匹配的话,那么需要写next()
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="新闻页面" }); 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)=> { next(); if(ctx.status==404){ ctx.status = 404; ctx.body="这是一个404页面" } });
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 Router = require('@koa/router'); var app = new Koa(); var router = new Router(); app.use(async (ctx,next)=>{ console.log('1、这是第一个中间件01'); await next(); console.log('5、匹配路由完成以后又会返回来执行中间件'); }) app.use(async (ctx,next)=>{ console.log('2、这是第二个中间件02'); await next(); console.log('4、匹配路由完成以后又会返回来执行中间件'); }) router.get('/',async (ctx)=>{ ctx.body="首页"; }) router.get('/news',async (ctx)=>{ console.log('3、匹配到了news这个路由'); ctx.body='这是一个新闻'; }) app.use(router.routes()); //作用:启动路由 app.use(router.allowedMethods()); //作用: 当请求出错时的处理逻辑 app.listen(3000, () => { console.log('starting at port 3000'); });