Экспресс-роутер, дополнительные расширения
У меня маршрут построен таким образом в разных файлах.
Мне нужен один из маршрутов для ответа на все эти расширения (в том числе без расширения):
/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)
корневой 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;
карта сайта-routes.js
const router = require('express').Router();
const sitemapRoot = router.route('/\.:ext?');
sitemapRoot((req, res) => { res.status(200).send('ok') };
modules.exports = router;
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
Объект к маршрутизатору, но это не желательно.