关于eggjs controller的疑惑
发布于 4 年前 作者 Jon-Millent 4322 次浏览 来自 问答

为什么当路由进入控制器的时候,controller都要重新实例化一遍?如下简单的代码。

const Controller = require('egg').Controller;
class User extends Controller {
  constructor(ctx) {
    super(ctx);
    console.log('<------------ constructor' + new Date())
  }
  index() {
  	const { ctx } = this;
  	ctx.body = 'hello world'
  }
}

个人的感觉不应该是控制器实例化一遍之后,路由直接调用实例化后的方法吗?如下伪代码:

const user = new User()
router.get('/user', user.index)

现在感觉是这样的。如下伪代码:

router.get('/user', function(some){
	const user = new User()
	user.index(some)
})
3 回复

因为 ctx 是请求相关的。

http是无状态的,每次请求都有独立的ctx的

如果你不希望A用户和B用户访问同一个路由的时候,身份信息、返回结果一样的话。

回到顶部