Javascript 在Express Router中访问Express应用程序
我有一个使用多个路由器的ExpressJS应用程序。以下是主应用程序的基本形式,它将所有内容联系在一起Javascript 在Express Router中访问Express应用程序,javascript,node.js,express,Javascript,Node.js,Express,我有一个使用多个路由器的ExpressJS应用程序。以下是主应用程序的基本形式,它将所有内容联系在一起 var express = require('express'); var routes = require('./routes/index'); var app = express(); app.set('someKey', someObj); app.use('/', routes); module.exports = app; 为了简洁起见,我删除了大部分代码 在该./rout
var express = require('express');
var routes = require('./routes/index');
var app = express();
app.set('someKey', someObj);
app.use('/', routes);
module.exports = app;
为了简洁起见,我删除了大部分代码
在该./routes/index.js文件中,我定义了一个Express Router,格式如下:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.render('index', { title: 'Express Test' });
});
module.exports = router;
我尝试使用以下方法从路由器内部访问“somekey”:
var app = require('../app');
var foo = app.get('somekey');
当运行时通知我没有这样的方法get for app时,这会崩溃并烧毁(进一步的调查表明app只是一个默认对象)
我想我忽略了一些非常明显的事情
我计划将一个knexjs对象传递给每个处理数据库调用的路由器。在代码的当前状态下,它会在每个路由器上复制。我希望在主应用程序中定义一次,然后供所有路由器使用,这样,如果在主应用程序中进行了更改,它将反映在路由器上。当您需要
应用程序时,您并不是在app.js
中定义的应用程序对象。相反,您要求的是该文件导出的内容。为了达到你想要达到的目的,你可以使用这样的方法
在你的app.js中
var express = require('express');
var app = express(); // Note the switched order
app.set('someKey', someObj);
var routes = require('./routes/index')(app);
app.use('/', routes);
module.exports = app;
然后在你的路线上:
var express = require('express');
var router = express.Router();
/* Wrap everything inside a function */
module.exports = function(app){
console.log(app.get('someKey')); // Access app passed to it from app.js
/* Declare all your routes here. app variable will be accessible */
router.get('/', function(req, res) {
res.render('index', { title: 'Express Test' });
});
return router;
};
基本上,当您需要a中的文件B并希望将变量从a传递到B时,这就是您遵循的一般模式
看看是否有帮助。:)