(导出)如何在Express中访问控制器内部的应用程序对象

时间:2018-10-16 06:53:30

标签: javascript node.js express ecmascript-6 next.js

我正在尝试弄清楚如何从路由控制器访问应用程序对象。在我的路线文件中,我有

const apiController = require('../controllers/mainController')
module.exports = (app) => {


    app.post("/stop",
        apiController.stopFlow
    );

    app.post("/specificSearch",
        apiController.initiateSearch);
}

由于某些原因,如果执行类似的操作,则无法访问这些控制器内部的(app)对象

module.exports = (app) =>{

    app.post('/stop', (req,res)=>{
        console.log(app)
    })

}

然后一切正常,所以我很好奇是否有办法将其传递给我的apiController吗?我的apiController看起来像这样

module.exports = {

    async stopFlow(req, res) {
        console.log("Stop");

        console.log(app)

    },
}

该怎么办?

2 个答案:

答案 0 :(得分:1)

在Express中,可以从任何请求处理程序内部使用req.app来访问app对象。 here in the doc对此有正确的解释。

答案 1 :(得分:0)

请求对象具有app属性:

  

此属性保存对使用中间件的Express应用程序实例的引用。

此外,它总是可以使用请求对象和您在其他应该有权访问该对象的中间人之前注册的中间件来传递对象。

app.use((req, res, next) => {
   req.theApp = app
   req.someDbConnection = dbConnection
})

然后在其他中间件/路由中:

app.post('/stop', (req,res)=>{
    console.log(req.theApp)
    console.log(req.someDbConnection)
})

您可能想使用项目唯一的命名空间来传递那些对象:

app.use((req, res, next) => {
   req.Stas = req.Stas || {}
   req.Stas.theApp = app
   req.Stas.someDbConnection = dbConnection
})