Estoy tratando de averiguar cómo acceder a un objeto de aplicación desde los controladores de ruta. En mi archivo de rutas tengo

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


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

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

Por alguna razón, no puedo acceder al objeto (app) dentro de estos controladores, sin embargo, si hago algo como

module.exports = (app) =>{

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

}

Entonces todo funciona bien, así que tenía curiosidad, ¿hay alguna manera de pasarlo a mi apiController? Mi apiController se ve así

module.exports = {

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

        console.log(app)

    },
}

¿Qué puedo hacer para resolver esto?

0
Stas 16 oct. 2018 a las 09:53

2 respuestas

La mejor respuesta

En Express, puede usar req.app desde el interior de cualquier controlador de solicitudes para obtener acceso al objeto app. Se explica directamente aquí en el documento.

1
jfriend00 16 oct. 2018 a las 07:21

El objeto de solicitud tiene una propiedad de aplicación:

Esta propiedad contiene una referencia a la instancia de la aplicación Express que usa el middleware.

Además de eso, siempre puede pasar objetos usando un objeto de solicitud y un middleware que usted registra antes que el otro middleware que debería tener acceso a ese objeto.

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

Y luego en el otro middleware / ruta:

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

Es posible que desee utilizar un espacio de nombres que sea exclusivo de su proyecto para pasar esos objetos:

app.use((req, res, next) => {
   req.Stas = req.Stas || {}
   req.Stas.theApp = app
   req.Stas.someDbConnection = dbConnection
})
0
t.niese 16 oct. 2018 a las 07:34