Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Express Router中访问Express应用程序_Javascript_Node.js_Express - Fatal编程技术网

Javascript 在Express Router中访问Express应用程序

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

我有一个使用多个路由器的ExpressJS应用程序。以下是主应用程序的基本形式,它将所有内容联系在一起

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时,这就是您遵循的一般模式

看看是否有帮助。:)