我目前正在开发使用很多路线的网站。最初,所有路由都在同一个文件中实现...为了使情况更清楚,我决定创建多个文件,以便使用路由器模块分隔路由...。
例如,在我的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
,在其余时间,每个模块都会加载一次,它将返回对先前加载的模块的引用。看看这个问题以获取更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句