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
/**
返回格式:
[todoItem, ...]
*/
@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
};
}
}
/**
返回格式:
{
code : 200,
result : [todoItem, ...]
}
*/
@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);
}
}

...
// 验证用户是否登录,如果没有则返回401
@Get('/todo/list')
@Response(Ok)
@Use(isLogin)
async getTodoList() {
return await app.models.todo.find({});
}
...