koa2中的控制器里面使用静态方法处理请求是否合理?
发布于 7 年前 作者 yongyuanfan 3460 次浏览 来自 问答

刚开始学习nodejs和koa2框架,对于一些细节不是很了解,求指教!

QQ图片20170420105907.png

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;
回到顶部