CNode

关于eggjs controller的疑惑

问答
JJon-Millent发布于6 年前最后回复6 年前3 回复5122 浏览0 收藏

为什么当路由进入控制器的时候,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)

L
lisniuse#1·6 年前

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

A
atian25#2·6 年前

因为 ctx 是请求相关的。

I
i5ting#3·6 年前

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

参与回复
登录后即可参与回复。登录