koa2中的控制器里面使用静态方法处理请求是否合理?
刚开始学习nodejs和koa2框架,对于一些细节不是很了解,求指教!
2 回复
同问。还有,继承的基类里的方法应该怎么调用? 里面this的指向已经被重写了, 并不能通过this调用
他用静态应该是为了防止this指针调用的时候指向不能被控制吧,就比如我下面的例子,他使用静态变量就保证了this指向不会发生错误 还有很大可能性static和普通内存占用也差不多,毕竟很多es6的语法仅仅是实现了功能 我这边就封装了个koa2,就没有这样用 https://github.com/zy445566/myKoa/
就比如我路由这边这样调用我的UserController控制器this指针就会变成joiRouter的指向
const joiRouter = require('koa-joi-router');
var HomeController = new (require('./controller/HomeController'))();
var UserController = new (require('./controller/UserController'))();
//-------------HomeController--------------
const home = joiRouter();
home.get('/', HomeController.index);
//--------------UserController---------------
const user = joiRouter();
user.get('/user', UserController.index);
user.get('/user/get-user', UserController.getUser);
//exports middleware
const routerList = [
home.middleware(),
user.middleware()
];
module.exports = routerList;
所以我就在UserController控制器里面通过userController变量来保证指向
const Controller = require('./Controller');
const UserServer = require('../server/UserServer');
var userController = null;
class UserController extends Controller
{
constructor()
{
super(new UserServer());
userController = this;
}
async index(ctx)
{
await ctx.render('user/index');
}
async getUser(ctx)
{
let userRes = userController.server.getAccount();
ctx.body = JSON.stringify(userRes);
}
}
module.exports = UserController;