Javascript (导出)如何在express中访问控制器内部的应用程序对象
我正在试图弄清楚如何从路由控制器访问应用程序对象。在我的路由文件中,我有Javascript (导出)如何在express中访问控制器内部的应用程序对象,javascript,node.js,express,ecmascript-6,next.js,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.in
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)
},
}
如何解决此问题?请求对象具有以下属性:
此属性包含对使用中间件的Express应用程序实例的引用
除此之外,您还可以始终使用请求obejct和中间件传递对象,这些中间件是您在其他应该访问该对象的中间件之前注册的
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
})
请求对象具有以下属性:
此属性包含对使用中间件的Express应用程序实例的引用
除此之外,您还可以始终使用请求obejct和中间件传递对象,这些中间件是您在其他应该访问该对象的中间件之前注册的
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
})
在Express中,您可以从任何请求处理程序内部使用
req.app
来访问app
对象。这是正确的解释。在Express中,您可以从任何请求处理程序内部使用req.app
来访问app
对象。这解释得很对。为什么要访问应用程序
,我无法想象为什么在请求发生时,访问应用程序
本身在任何方面都是必要的或有用的。似乎您试图以错误的方式解决问题。为什么要访问应用程序
,我无法想象为什么在请求发生时,访问应用程序
本身在任何方面都是必要的或有用的。你似乎试图用一种错误的方式来解决一个问题。这确实是我一直在寻找的,这确实是我一直在寻找的