如何在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
相关产品推荐
相关产品推荐

