快速路由器可选扩展

时间:2018-08-06 16:19:40

标签: express express-router

我在不同的文件中建立了这样的路由。

我需要一条路由来响应所有这些扩展(包括无扩展):

/api/sitemap
/api/sitemap.xml
/api/sitemap.html
/api/sitemap.json

我为站点地图路线卸载的路线定义如下:

router.route('/\.:ext?');

但是此人响应的唯一路径是/ api / sitemap。它不接受任何上述扩展名。实际上,它根本不响应任何扩展。

这是我的路线的简明版本:

/ 
/api
/api/sitemap (pattern should accept sitemap.xml sitemap.json or sitemap.html) 

root-routes.js

const apiRoutes = require('./api-routes.js');
const router = require('express').Router();
const mainRoot = router.route('/');
mainRoot((req, res) => { res.status(200).send('ok') };
router.use('/api', apiRoutes); 
module.exports = router;

api-routes.js

const sitemapRoutes = require('./sitemap-routes.js');
const router = require('express').Router();
const apiRoot = router.route('/');
apiRoot((req, res) => { res.status(200).send('ok') };
router.use('/sitemap', sitemapRoutes);
module.exports = router;

sitemap-routes.js

const router = require('express').Router();
const sitemapRoot = router.route('/\.:ext?');
sitemapRoot((req, res) => { res.status(200).send('ok') };
modules.exports = router;

1 个答案:

答案 0 :(得分:1)

我能够使用扩展名使用另一个.use进行路由匹配。

apiRouter.use("/sitemap", sitemapRouter);

apiRouter.use("/sitemap.:ext?", (req, res) => {
    // sample response
    res.end(`${req.params.ext ? req.params.ext : 'root'} did match!`);
});

我尝试了很多事情,但是这样做只能得到所需的路线匹配。如果需要将所有与sitemap相关的功能保持在一起,则应export路由器和/sitemap.:ext?回调所需的功能。

您可以做的另一件事是将app对象传递到路由器,但这是不希望的。