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,如
Allow
,Content-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();