5. 控制器
1. 控制器的作用
1. 处理HTTP请求
2. 处理业务逻辑
3. 发送HTTP响应
2. 编写控制器的最佳实践
每个资源的控制器放在不同的文件里
最好使用类+类方法的形式编写控制器
严谨的错误处理
3. 获取Http请求参数
1. 获取body中的参数
koa默认是不支持查看body中的参数, 所以我们需要安装koa-bodyparser中间件来解析body请求体
npm i koa-bodyparser --save
之后, 我们便可以获取body参数
ctx.request.body
2. 获取header
ctx.request.header
3. 获取query
(/users/zhanghao?age=12) query为?后面的内容
ctx.query
4. 获取路由参数(router params)
/users/zhanghao zhanghao为路由参数
ctx.params
4. 发送HTTP响应
1. 设置status
ctx.status = 204
2. 设置body
ctx.body = '' "
5 模拟数据库重构增删改查代码
在这里, 我们设置一个常量db模拟数据库
const Koa = require('koa') const Router = require('koa-router') const body = require('koa-bodyparser') const app = new Koa() const router = new Router() //y路由前缀 const usersRouter = new Router({prefix: '/users'}) app.use(body()) //模拟数据库 const db = [ {name : "李雷"}, {name : "朱丑"} ] router.get('/', (ctx) => { ctx.body = "这是主页" }) usersRouter.get('/', (ctx) => { ctx.body = db }) usersRouter.post('/', (ctx) => { //向db中添加元素 db.push(ctx.request.body) ctx.body = ctx.request.body }) usersRouter.get('/:id', (ctx) => { //这里默认id是数组的索引 ctx.body = db[ctx.params.id] }) usersRouter.delete('/:id', (ctx) => { //从第id项删除, 删除一项 db.splice(ctx.params.id, 1) ctx.status = 204 }) usersRouter.put('/:id', (ctx) => { db[ctx.params.id] = ctx.request.body ctx.body = ctx.request.body }) app.use(router.routes()) app.use(usersRouter.routes()) app.listen(3003)
注意: 使用koa-bodyparser的方法,需要加()