我目前正在开发一个使用很多路线的网站。一开始,所有的路由都是在同一个文件中实现的.为了让事情更清楚,我决定创建多个文件,以便分开路线.使用路由器模块。
例如,在我的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中声明一些变量,只有一次,而且我必须从我所包含的路由中访问它们。
发布于 2015-12-25 18:29:09
您可以将它们作为配置对象传递。另外,将您的路由更改为返回路由的函数,这样它就可以接受参数。
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。
发布于 2015-12-25 18:57:47
要进行更全面的访问,可以创建要共享global.For示例的变量。
//app.js
GLOBAL.config = {}最好为应用程序配置使用一个单独的文件。例如
//config.js
module.exports = {logging:true} 并使其成为app.js文件中的全局变量,如下所示
//app.js
GLOBAL.config = require('./config');现在,它将在您的路由定义中可用。例如
//routes/users.js
router.get('/', function(req, res, next) {
if(config.logAccess){
var accessTime = new Date();
console.log('access at '+accessTime.toTimeString());
}
res.send('respond with a resource');
});https://stackoverflow.com/questions/34465309
复制相似问题