You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Express中将值从app文件传递到路由文件

在Express中向模块化路由传递复用值的几种方法

方法1:将路由封装为接收参数的函数

把路由文件改成导出一个可接收配置参数的函数,返回Router实例,这样就能在引入时传递需要的值:

// routes/test.js
const express = require("express");

// 导出接收配置的函数
module.exports = (config) => {
  const router = express.Router();

  router.use((req, res, next) => {
    console.log("Time:", Date.now());
    next();
  });

  router.post("/", (req, res) => {
    console.log(config.url); // 使用传入的url
    res.send("请求处理完成");
  });

  return router;
};

在app.js中引入路由时传入参数:

// app.js
const express = require("express");
const app = express();
const port = 3000;
const url = "https://example.com/v1";

// 调用路由函数并传入配置
const testRouter = require("./routes/test")({ url });

app.use(express.json());
// 挂载路由到指定路径
app.use("/test", testRouter);

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});

方法2:使用app.locals挂载全局变量

Express的app.locals可存储应用级全局变量,所有路由都能通过req.app.locals访问:

// app.js
const express = require("express");
const app = express();
const port = 3000;
const url = "https://example.com/v1";

// 将url挂载到app.locals
app.locals.apiBaseUrl = url;

const test = require("./routes/test");

app.use(express.json());
app.use("/test", test);

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});

路由文件中通过req.app.locals获取值:

// routes/test.js
const express = require("express");
const router = express.Router();

router.use((req, res, next) => {
  console.log("Time:", Date.now());
  next();
});

router.post("/", (req, res) => {
  console.log(req.app.locals.apiBaseUrl); // 访问全局变量
  res.send("请求处理完成");
});

module.exports = router;

方法3:用自定义中间件注入值

如果只需要给特定路由传递值,可以写一个中间件把值注入到req对象:

// app.js
const express = require("express");
const app = express();
const port = 3000;
const url = "https://example.com/v1";
const test = require("./routes/test");

app.use(express.json());

// 自定义中间件,将url注入到req对象
app.use("/test", (req, res, next) => {
  req.apiUrl = url;
  next();
});

app.use("/test", test);

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});

路由文件中直接从req获取注入的值:

// routes/test.js
const express = require("express");
const router = express.Router();

router.use((req, res, next) => {
  console.log("Time:", Date.now());
  next();
});

router.post("/", (req, res) => {
  console.log(req.apiUrl); // 使用注入的值
  res.send("请求处理完成");
});

module.exports = router;

内容的提问来源于stack exchange,提问作者Ahmedtijani Umar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:40:05