将路线移动到 Express.js 中的文件中
Move routes into files in Express.js
假设我有一些路线(我还有很多,但这应该解释):
router.post('/post');
router.get('/post/:id');
router.get('/posts/:page?');
router.get('/search');
对于 /post
我知道我可以做类似的事情
app.use('/post', postRoutes)
其中 postRoutes
是另一个文件中的实际 post 路由。但是,我想将 all post 相关路线分组到 postRoutes
组件中(因此 /post
和 /posts
),搜索进入搜索组件等。有没有办法做类似
的事情
router.use(postRoutes); // includes routes 1-3 above
router.use(searchRoutes); // only the 4th route above
等等?这会让我保持顶层文件更干净。
您可以通过创建一个特殊的路由文件来做到这一点。这是此类文件的示例
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'));
是的,很简单。您甚至可以制作更多的嵌套层级。我认为将路线分开很好,尤其是当你有几十条路线时。
在您的第一个文件中 (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;
问题是我想错了。首先,不要使用单数和复数。这让人很头疼,也让人很难记住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));
然后在我的 api/index.js
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;
你可以看到我每次都是手动通过路由器。最后:
var routeInit = function (router) {
router.post('/blah', function (req, res, next) {
// Do stuff
});
return router;
};
module.exports = routeInit;
这让我可以无限深入地嵌套路由。
假设我有一些路线(我还有很多,但这应该解释):
router.post('/post');
router.get('/post/:id');
router.get('/posts/:page?');
router.get('/search');
对于 /post
我知道我可以做类似的事情
app.use('/post', postRoutes)
其中 postRoutes
是另一个文件中的实际 post 路由。但是,我想将 all post 相关路线分组到 postRoutes
组件中(因此 /post
和 /posts
),搜索进入搜索组件等。有没有办法做类似
router.use(postRoutes); // includes routes 1-3 above
router.use(searchRoutes); // only the 4th route above
等等?这会让我保持顶层文件更干净。
您可以通过创建一个特殊的路由文件来做到这一点。这是此类文件的示例
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'));
是的,很简单。您甚至可以制作更多的嵌套层级。我认为将路线分开很好,尤其是当你有几十条路线时。 在您的第一个文件中 (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;
问题是我想错了。首先,不要使用单数和复数。这让人很头疼,也让人很难记住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));
然后在我的 api/index.js
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;
你可以看到我每次都是手动通过路由器。最后:
var routeInit = function (router) {
router.post('/blah', function (req, res, next) {
// Do stuff
});
return router;
};
module.exports = routeInit;
这让我可以无限深入地嵌套路由。