node系列--【KOA2框架】

一、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

​ 设置签名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 中间件。

原文地址:https://www.cnblogs.com/chenhaiyun/p/14706095.html