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的方法,需要加()

浙公网安备 33010602011771号