在koa独立的路由器和控制器

我正在使用koa,我想分开路由器设置和控制器,但困惑“这个”。

let app = require('koa')(); let router = require('koa-router')(); class Controller { constructor () { this.users = ['ron', 'jack']; } getUsersFromDb() { return this.users; } * getUsers () { let users = this.getUsersFromDb(); // failed here, "this" is not the class instance this.body = users; // here "this" is the koa context; } } let controller = new Controller(); router.get('/users', controller.getUsers) app .use(router.routes()) .use(router.allowedMethods()) .listen(3000); 

干杯,罗恩

在koa中间件内部, this是koa上下文保留的,没有别的办法来访问请求和响应。 出于这个原因,你不能使用一个类来定义你的控制器,因为this已经被保留给别的东西了。 但是,您可以利用闭包并使用工厂function:

 let app = require('koa')(); let router = require('koa-router')(); var ControllerFactory = function(config){ // config used instead of constructor parameters // Define properties and functions var users = ['ron', 'jack']; function getUsersFromDb() { return users; } function * getUsers () { let users = getUsersFromDb(); this.body = users; } // Export what you need return { getUsers: getUsers, users: users } } let controller = ControllerFactory({foo:'bar'}); router.get('/users', controller.getUsers) app .use(router.routes()) .use(router.allowedMethods()) .listen(3000);