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

(Exports) How to access an app object inside of controllers in express

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

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)

    },
}

我该怎么做才能解决这个问题?

请求对象有一个 app 属性:

This property holds a reference to the instance of the Express application that is using the middleware.

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

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

然后在另一个middleware/route:

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
})

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