Node.js 将对象传递到在nodejs中用作中间件的路由文件

Node.js 将对象传递到在nodejs中用作中间件的路由文件,node.js,express,middleware,Node.js,Express,Middleware,当我的应用程序启动时,将创建一个对象,该对象在整个应用程序中多个文件中使用。在我的app.js文件中,我需要几个包含我的路线的文件。这些路由需要访问在app.js中创建的对象,因此我尝试将其传递给每个文件。下面是其中一个文件的示例 test.js const express = require('express'); const router = express.Router(); router.use('/api', router); router.post('/testRoute', (

当我的应用程序启动时,将创建一个对象,该对象在整个应用程序中多个文件中使用。在我的app.js文件中,我需要几个包含我的路线的文件。这些路由需要访问在app.js中创建的对象,因此我尝试将其传递给每个文件。下面是其中一个文件的示例

test.js

const express = require('express');
const router = express.Router();

router.use('/api', router);

router.post('/testRoute', (req, res, next) => {
    if(globalVariable.abc) { //globalVariable is the variable created in app.js
        //do some logic
    }
    res.json({
        message: "Test Route Success"
    })    
});

module.exports = router;
const assessmentRoutes = require('./routes/test');
app.use(assessmentRoutes);
app.js

const express = require('express');
const router = express.Router();

router.use('/api', router);

router.post('/testRoute', (req, res, next) => {
    if(globalVariable.abc) { //globalVariable is the variable created in app.js
        //do some logic
    }
    res.json({
        message: "Test Route Success"
    })    
});

module.exports = router;
const assessmentRoutes = require('./routes/test');
app.use(assessmentRoutes);
我尝试获取传入变量的一种方法是将test.js中的路由包装到一个函数中,该函数接受如下变量

module.exports = function(globalVariable) {
    router.post('/testRoute', (req, res, next) => {
    if(globalVariable.abc) { //globalVariable is the variable created in app.js
        //do some logic
    }
    res.json({
        message: "Test Route Success"
    })    
});
}
然后在app.js中,需要更改:

const assessmentRoutes = require('./routes/assessments')(globalVariable);
当我这样做时,启动应用程序时会出现错误,比如app.use()需要一个中间件函数

如何将对象传递到路由?

APP.JS

 app.locals.globalVariable= {type:"Fiat", model:"500", color:"white"};
TEST.JS

if (req.app.locals.globalVariable.type =="Fiat" ) {
.....
}

在test.js中,删除:

router.use('/api', router);
在你的app.js中更改以下行:

app.use('/', assessmentRoutes);

这应该是可行的。

test.js如何从app.js访问globalVariable?在test.js中,您从express.Route()获取路由器,这与app.js无关,然后您将路由器导出到app.js中,您应该在其中使用它,正如我前面提到的。您是正确的。缺少return语句就是问题所在。