我目前正在开发一个使用大量路线的网站。 一开始,所有路由都在同一个文件中实现...... 为了使事情更清楚,我决定创建多个文件,以便使用路由器模块分离路由。
例如,在我的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(...)
我知道我可以使用require
和module.exports
,但是必须在我的app.js中声明一些变量,只有一次,我必须从我包含的路径中访问它们。
答案 0 :(得分:2)
您可以将它们作为配置对象传递。同时将路线更改为返回路线的功能,这样可以采用参数。
ORDER BY
在你的主JS文件中,需要文件并调用它,并传递你所需要的一切。
module.exports = function (options) {
return function (req, res, next) {
// do your thing
// you have access to options variable as well
}
}
对于数据库连接,模型和其他第三方库,您无需将它们作为配置对象传递。将它们移动到外部文件并将app.use('/users', require('./routes/user')({
option1: 'value1',
option2: 'value2'
}));
移动到路径文件中是一种很好的做法。你需要尽可能多地解耦模块。
请记住,require
将加载每个模块一次,其余时间,它只返回对先前加载的模块的引用。请查看this question以获取更多信息。
答案 1 :(得分:1)
要获得更全面的访问权限,请将要共享的变量设为全局。例如
//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');
});