将路由移动到Express.js中的文件中

时间:2015-09-15 08:53:37

标签: node.js express organization

说我有一些路线(我有更多,但这应该解释):

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

等等?这样可以让我保持顶级文件更清晰。

3 个答案:

答案 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;

这让我可以无限地嵌套路线。