一、KOA2框架
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。
二、安装
参考官网https://koa.bootcss.com/
先初始化 npm init -y ; 在命令行输入npm i koa
二、KOA应用
let Koa = require("koa");
let app = new Koa();
// 自定义中间件
app.use(async (ctx)=>{
ctx.body="hello world";
})
app.listen(3000,()=>{
console.log("服务已启动");
});
三、KOA与express的区别
1)KOA将 request对象和 response对象封装为一个ctx
ctx.request; // 这是 koa Request
ctx.response; // 这是 koa Response
koa请求对象上的方法:https://koa.bootcss.com/#request
koa响应对象上的方法:https://koa.bootcss.com/#response
2) KOA可以直接添加设置cookie,但express需要中间件 cookie-parser
设置签名cookie
app.keys =["offcn.com"];
ctx.cookies.set("uname","zhangsan",{maxAge:1000*60*60*24,signed:true})
读取cookie
ctx.cookies.get(name,)
读取签名cookie
ctx.cookies.get(name, signed)
3) express有内置中间件,KOA没有任何内置中间件
app.use( express.static("./public") )
app.use( express.urlencode( {extened:false} ) )
app.use(express.json());
let router=express.Router()
4) KOA的洋葱皮模型
app.use( async (ctx,next)=>{
console.log(1);
next();
console.log(5);
})
app.use( async (ctx,next)=>{
console.log(2);
next();
console.log(4);
})
app.use( async (ctx)=>{
console.log(3);
})
//后台打印1 2 3 4 5
四、KOA第三方中间件
4.1 koa-router 实现路由功能
npm i koa-router
使用步骤:
1)引入模块
let Router = require("koa-router");
let router = new Router();
2) 添加路由
router.get("/home",(ctx,next)=>{
ctx.body = "<h1>欢迎访问首页</h1>"
})
3) 启动路由
app.use( router.routers() )
4.2 二级路由实现
创建routers目录,添加二级路由模块 book.js
let Router = require("koa-router");
let router = new Router();
router.get("/china",(ctx)=>{
ctx.body = "中文书籍"
})
router.get("/en",(ctx)=>{
ctx.body = "英文文书籍"
})
module.exports = router.routes()
在入口文件中,首先引入koa-router, 启动路由。再添加二级路由模块
let Router = require("koa-router");
let router = new Router();
//引入二级路由模块
let bookRouter = require("./routers/book.js")
//定义二级路由
router.use("/book", bookRouter)
//启动路由
app.use( router.routers() )
4.3 koa-static 静态资源下载
npm i koa-static
let static = require("koa-static")
let path = require("path");
// 设置public 为静态资源下载目录
app.use( static( path.join(__dirname,"public") ) )
4.4 表单数据解析
GET 方式提交: ctx.query
POST方式提交:使用 koa-bodyparser 中间件解析表单数据。
npm i koa-bodyparser
配置:
let bodyParser = require("koa-bodyparser");
// 设置bodyParser中间件
app.use( bodyParser() )
表单数据解析,在路由的处理函数中,使用 ctx.request.body 即可获得表单属性组成的对象。
router.post("/baoming",(ctx,next)=>{
console.log( ctx.request.body );
})
注意,如果表单中有上传控件,请使用 koa-formidable 中间件。