koa学习

本文介绍如何使用Koa框架进行路由与控制器的分离设计,包括设置允许的HTTP请求方法,获取各种类型的HTTP请求参数,以及如何组织项目结构以提高代码的可维护性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

allowedMethods

  • 响应options方法,告诉浏览器所支持的请求方法
  • 响应的返回405(不应许)和501(没实现)
app.use(router.allowedMethods());

获取HTTP请求参数

  • Query String, 如?q=keyword
  • Router Params, 如/urser/:id,必传参数放在路由参数上
  • Body, 如{name: "李雷"},请求体
  • Header, 如Accept 请求头

发送HTTP响应

  • 发送Status, 如200/400等
  • 发送Body,如{name: “李雷”}
  • 发送响应头Header,如AllowContent-Type

更好的项目结构

  • router 分离
  • 控制器分离
$ tree -L 2 --ignore-case app
app			// 代码目录, 如`src`
├── controllers		// 控制器
│   └── ctrl.users.js
├── index.js
└── routers		// 路由
    ├── index.js
    └── router.user.js

router.user.js

const KoaRouter = require('koa-router');
const router = new KoaRouter({ prefix: '/users' });
const {find, findById, add, update, delete: del} = require('../controllers/ctrl.users');

router.get('/', find);

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

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

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

router.post('/', add);

module.exports = router;

ctrl.users.js

let db = [{
    name: '张三'
}, {
    name: '李四'
}];

class UsersCtrl {
    add(ctx) {
        let user = ctx.request.body;
        db.push(user);
        ctx.body = user;
    }
    update(ctx) {
        let user = ctx.request.body;
        db[ctx.params.id] = user;
        ctx.body = user;
    }
    find(ctx) {
        ctx.body = db;
    }
    findById(ctx) {
        ctx.body = db[ctx.params.id]
    }
    delete(ctx) {
        db.splice(+ctx.params.id, 1);
        ctx.status = 204;
    }
}

module.exports = new UsersCtrl();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值