代码之家  ›  专栏  ›  技术社区  ›  LongHike

快速路由器可选扩展

  •  0
  • LongHike  · 技术社区  · 6 年前

    我在不同的文件中建立了这样一条路线。

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

    /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) 
    

    根路径.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;
    

    网站地图-routes.js

    const router = require('express').Router();
    const sitemapRoot = router.route('/\.:ext?');
    sitemapRoot((req, res) => { res.status(200).send('ok') };
    modules.exports = router;
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   emran    6 年前

    我可以用另一个 .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 对象进入路由器,但这是不可取的。

    推荐文章