gpt4 book ai didi

javascript - Node.js 多个 Express 对象

转载 作者:行者123 更新时间:2023-12-03 02:37:46 25 4
gpt4 key购买 nike

我一直在尝试了解 Node.js 的 Expressjs 框架如何处理多个文件中的路由,但没有成功。我的主 index.js 看起来类似于:

var express = require('express');
var app = express();
app.use('/route', require('./api/route'));
app.set('important_var', global_var);

在最后一行中,我为我的应用程序设置了一个全局变量,所有其他路由都需要该变量。

在第二个 JS 文件“./api/route.js”中,我做了同样的事情:

var express = require('express');
var router = app.Router();
router.get('/path1', () => {...});

在第二个文件中,我需要一个 important_var,它是在 index.js 中的应用程序级别设置的。我怎样才能访问它?我可以使用express()创建新的(如果它被认为是新的)对象吗? index.js 中的变量 app 是否被视为单例并且不会被重新创建?遇到这种情况我该如何处理?

最佳答案

如果我正确理解您的问题,那么这些就是您想要满足的要求:

  • 配置服务器的主文件。
  • 主文件设置可通过应用程序内的各种路径访问的“全局”值。
  • 可以访问全局值的子路由器文件。

如果这些要求正确,那么以下是满足这些要求的快速方式。

使用app.set用于存储应用程序全局变量可能会导致问题,因为它用于分配应用程序设置值。相反,应用程序全局变量可以安全地存储到 app.locals这是专门针对此用例的。

所以在你的主文件(/index.js)中:

const express = require('express');
const app = express();
const subRouter = require('./api/route');

app.locals.important_var = 'My App Global';

app.use('/route', subRouter);

然后,要访问子路由器文件 (/api/route.js) 中的应用程序全局,您可以使用 req.app.locals对象,它是对 app.locals 的引用:

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

module.exports = router;

router.get('/path1', (req, res) => {
console.log(req.app.locals.important_var);
// ...
});

关于javascript - Node.js 多个 Express 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471188/

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