04 Koa框架的控制器以及设计更合理的目录结构

4-1 控制器简介

4-2 获取HTTP 请求参数

4-3 发送HTTP响应

4-4 更合理的目录结构

4-1 控制器简介

  • 获取HTTP请求参数
  • 处理业务逻辑
  • 发送HTTP响应

获取 HTTP 请求参数

  • Query String,如?q= keyword
  • Router Params,如/users/:id
  • Body(请求体),如{name: “李雷”},注意不止是json格式还有form格式,通过content-type区分发送。
  • Header(请求头),如Accept、Cookie

发送 HTTP 响应

  • 发送 Status,如200/400
  • 发送 Body,如{name: '李雷‘}
  • 发送 Header,如 Allow,Content-Type

4-2 获取HTTP 请求参数

npm i koa-bodyparser --save
const bodyparser = require('koa-bodyparser')
app.use(bodyparser())

4-3 发送HTTP响应

  • 发送 status ctx.status = 200
  • 发送 body ctx.body = []
  • 发送 header
usersRouter.get('/', (ctx) => {
    ctx.set('Allow', 'GET, POST')
    ctx.body =[{name: '李雷'}, {name: '韩梅梅'}]
})

在这里插入图片描述
模拟增删改查

内存数据库:

const db = [{name: '李雷'}]

查:

usersRouter.get('/', (ctx) => {
    ctx.body = db
})

增:

usersRouter.post('/',  (ctx) => {
    db.push(ctx.request.body)
    ctx.body = ctx.request.body
})

查特定用户:

usersRouter.put('/:id',  (ctx) => {
    ctx.body = db[ctx.params.id * 1]
}) 

修改用户:

usersRouter.put('/:id',  (ctx) => {
    db[ctx.params.id * 1] = ctx.request.body
    ctx.body = ctx.request.body
}) 

删除用户:

usersRouter.delete('/:id',  (ctx) => {
   db.splice(ctx.params.id * 1, 1)
   ctx.status = 204
}) 

4-4 更合理的目录结构

  • 将路由单独放在一个目录
  • 将控制器单独放在一个目录
  • 使用 类+ 类方法的方式组织控制器

在这里插入图片描述

app/index.js

const koa = require('koa')
const bodyparser = require('koa-bodyparser')
const app = new koa()
const routing = require('./routes')

app.use(bodyparser())
routing(app)

app.listen(3000, () => console.log('程序启动在 3000 端口了'))

在app/index.js中实例化koa,引入路由并通过routing(app)注册路由,开启监听端口。

app/routes/index.js

const fs = require('fs')

module.exports = (app) => {
    fs.readdirSync(__dirname).forEach(file => {
        if (file === 'index.js') {
            return
        }
        const route = require(`./${file}`)
        app.use(route.routes()).use(route.allowedMethods())
    })
}

此js导出为一个方法,在app/index.js中被引入使用,把所有路由都注册。

app/routes/home.js

const Router = require('koa-router')
const router = new Router()
const {index} = require('../controllers/home')

router.get('/', index)

module.exports = router

app/controllers/home.js

class HomeCtl {
    index (ctx) {
        ctx.body = '<h1>这是主页</h1>'
    }
}

module.exports = new HomeCtl()

在router/home.js中引入了koa-router并实例化路由,编写路由并引入controller/home的方法作为路由的方法。

app/routes/users.js

const Router = require('koa-router')
const { prefix } = require('./home')
const router = new Router({prefix: '/users'})
const {find, findById, create, update, delete: del} = require('../controllers/users')

router.get('/', find)

router.post('/', create)

router.get('/:id', findById) 

router.put('/:id', update) 

router.delete('/:id', del)

module.exports = router

app/controllers/users.js

const db = [{name: '李雷'}]

class UsersCtl {
    find (ctx) {
        ctx.body = db
    }
    findById (ctx) {
        ctx.body = db[ctx.params.id * 1]
    }
    create (ctx) {
        db.push(ctx.request.body)
        ctx.body = ctx.request.body
    }
    update (ctx) {
        db[ctx.params.id * 1] = ctx.request.body
        ctx.body = ctx.request.body
    }
    delete (ctx) {
        db.splice(ctx.params.id * 1, 1)
        ctx.status = 204
    }
}

module.exports = new UsersCtl
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在创建koa2项目时,通常会遵循以下目录结构: 1. 项目根目录 - bin/www:项目的入口文件,定义了服务器的启动逻辑。 - public:用于存放一些样式、页面js逻辑、图片等静态资源。 - routes:用于存放路由文件,负责分发请求到对应的处理函数。 - node_modules:通过npm安装的依赖模块所在的文件夹。 2. 这些文件夹和文件的具体作用如下: - bin/www:作为服务器的入口文件,定义了服务器的启动逻辑。 - public:存放一些静态资源,如样式、页面js逻辑、图片等。 - routes:存放用于处理不同路由的JavaScript文件,负责分发请求到对应的处理函数。 - node_modules:通过npm安装的依赖模块所在的文件夹。 请注意,以上是一个通用的koa2项目目录结构示例,实际项目中可能会根据具体需求进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [3.KOA2后台框架搭建以及目录结构](https://blog.csdn.net/weixin_30039205/article/details/81748223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [node使用Koa2搭建web项目的方法](https://download.csdn.net/download/weixin_38644780/14858643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值