在koa中分离路由器和控制器
Separate router and controller in koa
我用的是koa,想把路由设置和控制器分开,但是很困惑"this"。
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 上下文,没有其他方法可以访问请求和响应。因此,您不能使用 class 来定义您的控制器,因为 this
已经被保留用于其他用途。但是,您可以利用闭包并使用工厂函数:
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);
我用的是koa,想把路由设置和控制器分开,但是很困惑"this"。
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 上下文,没有其他方法可以访问请求和响应。因此,您不能使用 class 来定义您的控制器,因为 this
已经被保留用于其他用途。但是,您可以利用闭包并使用工厂函数:
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);