5. 控制器

Posted zhanghaoblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的方法,需要加()

  

 

 

  

以上是关于5. 控制器的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段5——HTML元素结构

Laravel:如何在控制器的几种方法中重用代码片段

片段中的媒体控制器

如何将这个 Objective-C 代码片段写入 Swift?

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

需要一种有效的方法来避免使用 Laravel 5 重复代码片段