关于eggjs controller的疑惑
为什么当路由进入控制器的时候,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用户访问同一个路由的时候,身份信息、返回结果一样的话。