说我有一些路线(我有更多,但这应该解释):
router.post('/post');
router.get('/post/:id');
router.get('/posts/:page?');
router.get('/search');
对于/post
我知道我可以做的事情
app.use('/post', postRoutes)
其中postRoutes
是另一个文件中的实际发布路由。不过,我想将所有帖子相关的路由分组到postRoutes
组件(/post
和/posts
),搜索搜索组件等等。有没有办法做类似
router.use(postRoutes); // includes routes 1-3 above
router.use(searchRoutes); // only the 4th route above
等等?这样可以让我保持顶级文件更清晰。
答案 0 :(得分:2)
是的,这很简单。你甚至可以制作更多的嵌套级别。我认为将路线分开是好的,特别是当你有几十条路线时。 在你的第一个文件(server.js)
app.use(require("./allpost"));
app.use(require("./allqueries"));
allpost.js中的
var express = require('express');
var router = new express.Router();
router.post('/post', function (req, res) {
//your code
});
router.get('/post/:id', function (req, res) {
//your code
});
router.get('/posts/:page?', function (req, res) {
//your code
});
何时需要更多嵌套
router.use(require("./deeper"));
或当您想要使用路径部分
时router.use("/post2/", require("./messages/private"));
module.exports = router;
答案 1 :(得分:0)
您可以通过创建特殊路径文件来实现。以下是此类文件的示例
module.exports = (function() {
var express = require('express');
var router = express.Router();
router.get("/:id", function (request, response, next) {
request.body.id = request.params["id"];
// Do something ...
});
router.post("/someRoute", function (request, response, next) {
// Do something ...
});
// And so on ...
return router;
})();
接下来,在您server.js
文件中,像这样包含它
app.use('/post', require('./routes/postRoutes'));
答案 2 :(得分:0)
问题是我在考虑这个错误。首先,不要使用单数和复数。这让人很头疼,也让人们很难记住API。
一旦我使用了所有复数,我在index.js文件中有这样的设置:
.center {
text-align: center;
height: 100%;
/* Safari, Opera, and Chrome */
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-align: center;
/* Firefox */
display: -moz-box;
-moz-box-pack: center;
-moz-box-align: center;
/* Internet Explorer 10 */
display: -ms-flexbox;
-ms-flex-pack: center;
-ms-flex-align: center;
}
然后在我的api / index.js
中// The API routes all start with /api and we pass app here so we can have some
// sub routes inside of api
app.use('/api', require('./app/api')(app));
你可以看到我每次都手动通过路由器。最后:
var express = require('express');
var router = express.Router({ mergeParams: true });
var routeInit = function (app) {
app.use('sessions', require('./sessions')(router));
app.use('users', require('./users')(router));
return router;
};
module.exports = routeInit;
这让我可以无限地嵌套路线。