我目前正在开发一个使用很多路由的网站。 一开始,所有的路由都在同一个文件中实现...... 为了让事情更清楚,我决定创建多个文件,以便使用 Router 模块分隔路由。
例如,在我的 users.js 文件中,我有:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
在我的主 app.js 文件中:
app.use('/users', require('./routes/user');
这工作完美,但问题是我想要我的“用户”路线
访问 app.js 文件中在 app.use(...)
我知道我可以使用 require
和 module.exports
,但有些变量必须在我的 app.js 中声明一次,而且我必须从我包括的路线。
最佳答案
您可以将它们作为配置对象传递。还要将您的路线更改为返回路线的函数,这样它就可以接受参数。
module.exports = function (options) {
return function (req, res, next) {
// do your thing
// you have access to options variable as well
}
}
在你的主 JS 文件中,要求该文件并调用它,然后传递你需要的所有内容。
app.use('/users', require('./routes/user')({
option1: 'value1',
option2: 'value2'
}));
对于数据库连接、模型和其他第三方库之类的东西,您不需要将它们作为配置对象传递。将它们移动到外部文件并在路由文件中require
它们是一个很好的做法。您需要尽可能多地解耦模块。
请记住,require
将加载每个模块一次,其余时间,它仅返回对先前加载的模块的引用。看看this question了解更多信息。
关于javascript - Node Express.js 从单独文件中声明的路由访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465309/