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

  

 

 

  

posted @ 2019-10-19 23:35  改变就是好事哈  阅读(159)  评论(0编辑  收藏  举报