【问题标题】:Accessing Global Variables within Routes in Express在 Express 中访问路由中的全局变量
【发布时间】:2022-08-04 21:51:06
【问题描述】:

我还是 Express 的新手,所以请多多包涵。

我试图做的是将我的一些环境变量存储在一个全局变量中,这样就可以在任何路由中访问它们,而无需在每个路由中重新声明变量。

请注意,我使用 Express Generator 来设置项目脚手架。

这是我正在尝试做的一个精简示例:

应用程序.js

const express = require(\'express\');

// Load Routes
const inventoryRouter = require(\'./src/routes/inventory\');

// Instantiate Express/Assign App Var
const app = express();

// Set Global Env Vars
app.set(\'DevUrl\', process.env.Dev_URL || null);

// Use Routes
app.use(\'/inventory\', inventoryRouter);

module.exports = app;

Inventory.js

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

// Require Inventory Controller
const inventoryController = require(\'../controllers/inventoryController\');

// Inventory Routes
router.get(\'/\', inventoryController.get_inventory);
router.post(\'/\', inventoryController.update_inventory);

module.exports = router;

库存控制器.js

const router = express.Router();

// Store Vars
const LocalRouteVariable = app.get(\'DevUrl\') + \'Some String\';

// Rest of Controller Code ...

问题\"app\" 未在控制器中定义。所以,我的问题是,我怎样才能得到 \"DevUrl\" 的值?

  • 用函数控制器传递 req 对象有什么问题?
  • 这些是我将在我的应用程序中重用的环境变量,但不一定在 req 对象中。所以,我需要能够在 req 对象之外访问它。有什么想法吗?
  • 如何使用 dotenv 包
  • 是的,我正在使用 Dotenv。最佳实践是直接在路由文件中直接添加 process.env.something 环境变量,还是在配置文件中管理所有环境变量以在您的路由中使用?

标签: javascript node.js express routes controller


【解决方案1】:

您可以使用req.app 从控制器内部访问应用程序实例。

在你的情况下:

库存控制器.js

export get_inventory = async (req, res, next) =>{
   const devUrl = req.app.get('DevUrl');
   //Controller Logic
}

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2017-06-15
    • 2014-11-11
    相关资源
    最近更新 更多