目录
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
.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
= "详细页面";
});
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
=> {
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"))