3 回答
TA贡献1865条经验 获得超7个赞
在@ShadowCloud的例子的基础上,我能够动态地包含子目录中的所有路由。
路线/ index.js
var fs = require('fs');
module.exports = function(app){
fs.readdirSync(__dirname).forEach(function(file) {
if (file == "index.js") return;
var name = file.substr(0, file.indexOf('.'));
require('./' + name)(app);
});
}
然后将路由文件放在routes目录中,如下所示:
路线/ test1.js
module.exports = function(app){
app.get('/test1/', function(req, res){
//...
});
//other routes..
}
重复那个我需要的次数,然后最终在app.js放置
require('./routes')(app);
TA贡献1770条经验 获得超3个赞
即使这是一个较老的问题,我在这里偶然发现了寻找类似问题的解决方案。在尝试了一些解决方案之后,我最终走向了一个不同的方向,并认为我会为其他任何人在这里添加我的解决方案。
在express 4.x中,您可以获取路由器对象的实例并导入包含更多路由的另一个文件。您甚至可以递归执行此操作,以便您的路由导入其他路由,从而允许您创建易于维护的URL路径。例如,如果我的'/ tests'端点已经有一个单独的路由文件,并且想为'/ tests / automated'添加一组新的路由,我可能想要将这些'/ automated'路由分解为另一个文件到保持我的'/ test'文件小而易于管理。它还允许您通过URL路径将路由逻辑分组,这非常方便。
./app.js的内容:
var express = require('express'),
app = express();
var testRoutes = require('./routes/tests');
// Import my test routes into the path '/test'
app.use('/tests', testRoutes);
./routes/tests.js的内容
var express = require('express'),
router = express.Router();
var automatedRoutes = require('./testRoutes/automated');
router
// Add a binding to handle '/test'
.get('/', function(){
// render the /tests view
})
// Import my automated routes into the path '/tests/automated'
// This works because we're already within the '/tests' route so we're simply appending more routes to the '/tests' endpoint
.use('/automated', automatedRoutes);
module.exports = router;
./routes/testRoutes/automated.js的内容:
var express = require('express'),
router = express.Router();
router
// Add a binding for '/tests/automated/'
.get('/', function(){
// render the /tests/automated view
})
module.exports = router;
- 3 回答
- 0 关注
- 1038 浏览
添加回答
举报