(Экспорт) Как получить доступ к объекту приложения внутри контроллеров в экспресс - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь выяснить, как получить доступ к объекту приложения из контроллеров маршрута.В моем файле маршрутов у меня есть

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 голосов
/ 16 октября 2018

В Express вы можете использовать req.app из любого обработчика запроса, чтобы получить доступ к объекту app.Это объясняется прямо здесь, в документе .

0 голосов
/ 16 октября 2018

Объект запроса имеет app proeprty:

Это свойство содержит ссылку на экземпляр приложения 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
})
...