使用此链接作为引用 https://github.com/visionmedia/express/tree/master/examples/route-separation “可以做什么”
我没有使用 Express。我以它们为例。
我想做这样的事情,但“更简单”......
如何才能避免在一个文件中的一个长而复杂的列表中声明所有路由?我可以通过将路由器传递到我的模块中来定义它们,然后将所有代码包含在一个目录中吗?好吧,我会忍受一个只包含“require”的长文档,例如index.js,为此一个〜至少我的构建脚本可以为我重建一个,但最好不要在我可能添加的每一条路线的主文件中。
例如,他们使用以下代码:
// General
app.get('/', site.index);
// User
app.all('/users', user.list);
app.all('/user/:id/:op?', user.load);
app.get('/user/:id', user.view);
app.get('/user/:id/view', user.view);
app.get('/user/:id/edit', user.edit);
app.put('/user/:id/edit', user.update);
// Posts
app.get('/posts', post.list);
我想避免在我的 app.js 中创建类似的列表。我想让每个文件都知道该文件的路由。
这就是我想要做的:(请不要批评代码,我让它变得非常简单,所以我确保我以我想要的方式说明我的代码)
//app.js
var router = require('./myRouter.js')
var includes = require('./routes/*.js').register(router)
// do some stuff here with an https server and start the server here
和
//./routes/user.js
var myRouter;
exports.register(router){
myRouter = router;
}
router.addRoute(/* here I do the magic associated with this route */)
我可以这么简单吗?我在这里缺少什么?
我没有编写这段代码,因为我非常确定我的处理方式是错误的。
如果我必须在 /routes/
文件夹中使用类似 index.js
的东西,我可以使用我演示过的相同概念吗?喜欢在我的代码中使用附加的 .register(router)
以便我可以递归地传递该信息?这行得通吗?
最佳答案
我为此使用 index.js
文件,并使用 require("routes")
这是一个文件夹。
// app.js
route = require("./routes"),
...
route(app);
// routes/index.js
var index = require("./index-route"),
about = require("./about-route"),
posts = require("./posts-route");
module.exports = function(app) {
index(app);
about(app);
posts(app);
};
这是有效的,因为如果您需要
一个文件夹,它会默认加载index.js
。
如果您有很多路由,您可能希望根据约定加载它们
var routes = [];
// read all files
fs.readdir("./", function(files) {
files.forEach(function(val) {
// require all non-index.js files.
if (val !== "index.js") {
routes.push(require(val));
}
});
});
module.exports = function(app) {
// for each route you required call it with app.
routes.forEach(val.bind(null, app));
}
这将加载所有非“index.js”的 .js 文件,因此当您路由它们时,/routes/
文件夹中的任何文件都会被加载并运行。
关于javascript - 如果没有 Nodejs 中所有路由的一个长文件,我该如何进行路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092920/