controllers
controller类保存的目录,controller类必须是基于require('koa-cola/client')
的装饰器(decorator),使用装饰器可以定义路由router和view等信息,你可以根据不同的业务需求设计不同的controller。
提供api接口的controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const { Controller, Get, Post, Body, Ctx, Response } = require('koa-cola/client');
@Controller('') export default class { @Get('/todo/list') async getTodoList() { return await app.models.todo.find({}); }
@Post('/todo/save') async saveTodo(@Body() body) { return await app.models.todo.save(body); } }
|
可以通过Response装饰器返回固定数据格式
1 2 3 4 5 6 7 8
|
@Get('/todo/list') async getTodoList() { return await app.models.todo.find({}); }
|
使用Response装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| const Ok = function Ok(ctx, data){ ctx.status = 200; if(data){ ctx.body = { code : 200, result : data }; } }
@Get('/todo/list') @Response(Ok) async getTodoList() { return await app.models.todo.find({}); }
|
使用Use装饰器验证请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function isLogin(ctx, next){ if(ctx.state.user){ await next(); }else{ ctx.throw(401); } }
... @Get('/todo/list') @Response(Ok) @Use(isLogin) async getTodoList() { return await app.models.todo.find({}); } ...
|