【问题标题】:Dependency inject into Express route依赖注入到 Express 路由
【发布时间】:2015-04-16 04:05:26
【问题描述】:

我需要将我的db 对象注入securityHandler 对象,但我似乎不知道该怎么做。

securityHandler.authenticate 方法中,我想访问所有:dbrequestresponse

我试过了:

app.post('/api/login', securityHandler.authenticate(request, response, db) );

SecurityHandler.prototype.authenticate = function authenticate(request, response, db) {};

编辑:

nane 建议将 db 对象传递给 SecurityHandler 的构造函数:

var security = new SecurityHandler(db);

SecurityHandler 本身如下所示:

function SecurityHandler(db) {
    console.log(db); // Defined
    this.db = db;
}

SecurityHandler.prototype.authenticate = function authenticate(request, response, next) {
    console.log(this.db); // Undefined
};

db 对象现在存在于构造方法中,但由于某种原因在身份验证方法中无法访问。

【问题讨论】:

  • securityHandler 是使用securityHandler = new SecurityHandler() 创建的对象? db 是什么(这是在哪里定义/创建的)它在快速路由中没有任何标准。
  • 两者都是我创建的,是的,使用“new”关键字。
  • 为什么不注入SecurityHandler构造函数securityHandler = new SecurityHandler(db),或者只需要那里...

标签: node.js express


【解决方案1】:

您可以在 express.js 中编写自定义中间件,并在路由任何请求之前使用它。

有关自定义中间件的更多信息 - 您可以参考 - Express.js Middleware Demystified

现在在这个中间件中,您可以实现与身份验证相关的功能,该功能将在所有请求之前触发,您可以根据中间件本身的 request.url 操作代码。

希望这会对您有所帮助。 谢谢。

【讨论】:

    【解决方案2】:

    securityHandler.authenticate(request, response, db) 会立即调用authenticate,因为你会将authenticate 调用的结果作为回调传递给app.post('/api/login', /*...*/)

    你需要这样做:

    app.post('/api/login', function(request, response) {
       securityHandler.authenticate(request, response, db) );
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多