07-Koa

    科技2025-10-17  12

    目录

    1. koa介绍2. koa的使用2-1. 创建简单的服务器2-2. 接收浏览器请求地址 3. Application对象4. request及response别名4-1. request别名4-2. response别名 5. 常见http状态码6. koa常用中间件介绍6-1. koa-router6-2. koa-views6-3. koa-static

    1. koa介绍

    koa是express原班人马打造的轻量、健壮、富有表现力的nodejs框架;目前koa有koa1和koa2两个版本;koa2依赖Node.js 7.6.0或者更高版本;koa不在内核方法中绑定任何中间件,它仅仅是一个轻量级的函数库,几乎所有功能都必须通过第三方插件来实现。

    2. koa的使用

    2-1. 创建简单的服务器

    Koa 利用中间件 控制"上游",调用"下游“;ctx -> context 上游或者下游的对象;req == ctx.req; res = ctx.res;封装了req和res : ctx.request和ctx.response const Koa = require("koa"); const app = new Koa(); app.use((ctx,next)=>{ // ctx.response.body ctx.body = "你好"; }); app.listen(3000);

    koa是包含一组中间件函数的对象;可以将app.use里的函数理解成中间件;

    通过next()将控制转交给另一个中间件

    执行顺序:洋葱模型

    const Koa = require("koa"); const app = new Koa(); let middleWare1 = async (ctx,next)=>{ console.log("first start"); ctx.body = "hello world_1"; next(); console.log("first end"); } let middleWare2 = async (ctx,next)=>{ console.log("second start"); ctx.body = "hello world_2"; console.log("second end"); } app.use(middleWare1); app.use(middleWare2); app.listen(3000); >first start >second start >second end >first end

    2-2. 接收浏览器请求地址

    请求地址 http://localhost:3000/?name=zhangsan 未封装前 const url = require("url"); let objUrl = url.parse(ctx.req.url,true) console.log(objUrl.query); 封装后 console.log(ctx.request.query.name); const Koa = require("koa"); const app = new Koa(); app.use((ctx,next)=>{ ctx.body = "你好"; console.log(ctx.request.query.name); }); app.listen(3000); > zhangsan

    3. Application对象

    application是koa的实例,简写appapp.use 将给定的中间件方法添加到此应用程序,分为同步和异步,异步:通过es7中的async和await来处理app.listen设置服务器端口app.on 错误处理 // 错误处理中间件 app.on("error",err=>{ console.log(err); })

    4. request及response别名

    4-1. request别名

    【koa会把ctx.requset上的属性直接挂载到ctx上】

    ctx.header //头信息;ctx.headersctx.methodctx.method=ctx.urlctx.url=…

    4-2. response别名

    【同样也会把ctx.response上的属性直接挂载到ctx上】

    ctx.bodyctx.body=ctx.statusctx.status=…

    5. 常见http状态码

    http状态码:1xx(消息)、2xx(成功)、3xx(重定向)、4xx(请求错误)、5xx和6xx(服务器错误) HTTP状态码描述100继续。继续响应剩余部分,进行提交请求200成功301永久移动。请求资源永久移动到新位置302临时移动。请求资源零时移动到新位置304未修改。请求资源对比上次未被修改,响应中不包含资源内容401未授权,需要身份验证403禁止。请求被拒绝404未找到,服务器未找到需要资源500服务器内部错误。服务器遇到错误,无法完成请求503服务器不可用。零时服务过载,无法处理请求

    6. koa常用中间件介绍

    6-1. koa-router

    路由是引导匹配之意,是匹配url到相应处理程序的活动。Koa-router推荐使用RESTful架构API const Koa = require("koa"); const Router = require("koa-router"); const app = new Koa(); const router = new Router(); router.get("/", async (ctx, next) => { ctx.body = "你好"; // 重定向 ctx.redirect("/index"); }); router.get("/index", async (ctx, next) => { ctx.body = "主页"; }); router.get("/detail", async (ctx, next) => { ctx.body = "详细页面"; }); // 请求方式:get:获取 post:添加 put:更新 delete:删除 router.all("/getData/:id", async (ctx, next) => { ctx.body = { name: "张三", age: 20 }; console.log(ctx.params.id) }) app.use(router.routes()); app.listen(3000);

    6-2. koa-views

    用于加载html模板文件加载模板引擎pug的例子 const Koa = require("koa"); const Router = require("koa-router"); // 视图管理模块,用于加载模板 const views = require("koa-views"); let app = new Koa(); let router = new Router(); app.use(views(__dirname + "/views",{ map: { html: "pug" } })) router.get("/", async ctx => { // render():服务端在响应 http 请求的时候调用 res.render({options}) 去向模板中渲染数据, 可以把视图响应给客户端. // 渲染加载模板需要时间,所以是异步 await ctx.render("index.pug"); }); app.use(router.routes()); app.listen(3000);

    6-3. koa-static

    是用于加载静态资源的中间件,通过它可以加载css、js等静态资源;注:若端口号为8888,则由于app.use(static(__dirname+"/static"))使得目前端口号8888对应的文件夹为__dirname+"/static",则此时加载静态文件a.js的index.js页面引入静态文件只需要<script src="a.js"></script> const static = require("koa-static"); app.use(static(__dirname+"/static")) //加载静态文件的目录
    Processed: 0.010, SQL: 8