07-Koa

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的实例,简写app
  • app.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.headers
  • ctx.method
  • ctx.method=
  • ctx.url
  • ctx.url=

4-2. response别名

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

  • ctx.body
  • ctx.body=
  • ctx.status
  • ctx.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")) //加载静态文件的目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值