Koa2基础入门+中间件实战简易笔记
一、基础入门快速搭建核心API环境准备前提Node.js 版本 ≥ 7.6支持async/await初始化项目npm init -y安装Koa2npm install koa快速搭建第一个Koa服务核心代码// app.jsconstKoarequire(koa)constappnewKoa()// 创建Koa实例// 响应请求最基础的中间件app.use(async(ctx){ctx.bodyHello Koa2// 设置响应体替代res.end()})// 监听端口默认3000app.listen(3000,(){console.log(Koa server running at http://localhost:3000)})运行node app.js访问http://localhost:3000即可看到响应结果。核心API前端重点掌握ctx上下文对象整合了request和responsectx.request请求对象获取请求参数、请求头ctx.response响应对象设置响应体、响应头常用简化APIctx.query获取get请求参数、ctx.params获取路由参数、ctx.body设置响应体app.use(middleware)注册中间件核心方法app.listen(port)监听端口启动服务二、核心中间件与洋葱模型重点洋葱模型核心理解中间件按注册顺序正向执行执行完内部逻辑后反向回溯执行后续逻辑类似“剥洋葱”核心是async/await的异步控制。// 洋葱模型演示app.use(async(ctx,next){console.log(1. 第一个中间件正向执行)awaitnext()// 执行下一个中间件暂停当前中间件console.log(1. 第一个中间件反向回溯)})app.use(async(ctx,next){console.log(2. 第二个中间件正向执行)awaitnext()console.log(2. 第二个中间件反向回溯)ctx.body洋葱模型演示})// 运行结果1→2→2→1正向执行完反向回溯前端常用中间件实战直接复用1跨域中间件解决前端跨域痛点安装依赖npm install koa2-corsconstcorsrequire(koa2-cors)// 配置跨域允许所有域名实际项目可限制具体域名app.use(cors({origin:*,// 允许跨域的域名credentials:true,// 允许携带CookieallowMethods:[GET,POST,PUT,DELETE]// 允许的请求方法}))2日志中间件排查请求问题// 自定义日志中间件无需额外安装依赖app.use(async(ctx,next){conststartDate.now()// 记录请求开始时间awaitnext()// 执行后续中间件consttimeDate.now()-start// 计算请求耗时// 打印日志请求方法、请求路径、耗时、状态码console.log(${ctx.method}${ctx.path}-${time}ms -${ctx.status})})3异常捕获中间件避免服务崩溃app.use(async(ctx,next){try{awaitnext()// 执行后续中间件// 处理404if(ctx.status404){ctx.status404ctx.body接口不存在}}catch(err){// 捕获所有异常返回统一错误格式ctx.status500ctx.body{code:500,message:服务器内部错误,err:err.message}}})三、中间层核心实战接口转发前端学习Koa2的核心用途之一实现前端请求转发至后端适配接口格式。安装依赖npm install koa-router axioskoa-router用于路由管理axios用于转发请求实战代码接口转发完整示例constKoarequire(koa)constRouterrequire(koa-router)constaxiosrequire(axios)constappnewKoa()constrouternewRouter()// 创建路由实例// 1. 注册跨域、异常捕获中间件先注册全局中间件app.use(cors())app.use(异常捕获中间件)// 上面自定义的异常中间件// 2. 接口转发路由前端请求/api/user转发至后端接口router.get(/api/user,async(ctx){try{// 1. 获取前端请求参数const{id}ctx.query// 2. 转发请求至后端服务替换为实际后端接口地址constresawaitaxios.get(http://localhost:8080/backend/user,{params:{id}// 传递前端参数})// 3. 格式化响应返回给前端ctx.body{code:200,message:success,data:res.data}}catch(err){ctx.throw(500,接口转发失败)}})// 注册路由app.use(router.routes()).use(router.allowedMethods())app.listen(3000,(){console.log(Koa中间层服务启动成功)})四、注意事项前端重点避坑中间件注册顺序很重要全局中间件跨域、异常捕获先注册再注册路由中间件避免失效。必须使用await next()如果中间件没有await next()后续中间件不会执行洋葱模型会断裂。ctx.body必须设置如果没有设置ctx.body前端会收到404响应Koa默认响应404。避免回调地狱全程使用async/await贴合前端异步编程习惯不要嵌套回调。五、快速练习建议先跑通基础服务熟悉ctx对象和中间件执行顺序实现3个核心中间件跨域、日志、异常捕获完成1个接口转发实战对接自己本地的后端接口或模拟接口练习完成后尝试集成Redis缓存高频请求贴合中间层性能优化需求。