gpt4 book ai didi

javascript - 使用 Express Router 访问 Express 应用程序

转载 作者:行者123 更新时间:2023-12-02 16:47:01 26 4
gpt4 key购买 nike

我有一个使用多个路由器的 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 (进一步调查发现应用程序只是一个默认对象)。

我认为我忽略了一些完全显而易见的事情。

我计划将一个 knexjs 对象传递给每个处理数据库调用的路由器。在代码的当前状态下,它在每个路由器之间复制。我希望在主应用程序中定义一次,然后由所有路由器使用,这样如果在主应用程序中进行更改,它就会反射(reflect)在路由器上。

最佳答案

当您以这种方式需要 app 时,您并不完全引用您在 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;

然后在你的 route :

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

看看是否有帮助。 :)

关于javascript - 使用 Express Router 访问 Express 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27032468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com