Node Express.js从单独文件中声明的路由访问变量
Node Express.js access variables from routes declared in separate files
我目前正在开发一个使用大量路线的网站。一开始,所有的路由都是在同一个文件中实现的。。。为了让事情更清楚,我决定创建多个文件,以便分离路线。。。使用路由器模块。
例如,在我的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.use(...)
之前已声明到app.js文件中的一些变量
我知道我可以使用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
将加载每个模块一次,其余时间,它只返回对先前加载的模块的引用。查看此问题以了解更多信息。
为了实现更全局的访问,您可以将要共享的变量设置为全局变量。例如
//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');
});
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- Emberjs应用程序加载在除Index之外的所有路由上
- 正在使用$location.path(.)路由ng视图
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 直接在函数声明上使用function.prototype.bind
- 获取HTML属性中CSS声明的值
- 对API数据使用声明性绑定
- 未激发路由的控制器属性上的观察者
- 可以Resharper在我的javascript函数声明中添加分号
- AngularJS ui路由器html5模式中断路由
- 发送json对象或使用express路由呈现视图
- 如何为排除无穷大和NaN的数字声明Flow类型
- 在 TypeScript 中的 Sammy Js 中声明路由
- Node Express.js从单独文件中声明的路由访问变量
- 在配置中声明的路由与由其控制器声明的路由相比
- 如何访问node.js Express 2.5.5中单独路由文件中主应用程序.js中声明的变量
- 正确的Ember.js资源路由声明
- 对峙:ASP.NET mvc声明式、格式字符串式路由和node's命令式路由
- 使用数组声明路由
- 使用路由添加的控制器在Angular JS中声明$scope变量