Как ответить xml с node js express? - PullRequest
1 голос
/ 21 февраля 2020

Я хочу написать функцию, которая может генерировать карту сайта, например https://www.bbc.co.uk/sitemap.xml. Итак, вот мой код

module.exports.sitemapTag = async (req, res) => {
  try {
    const defaultPath = 'https://example.com/tag';
    const tagList = [];
    const data = { tags: await TagService.getAllTag() };
    // eslint-disable-next-line no-restricted-syntax
    for (const item of data.tags) {
      const element = {
        sitemap: {
          tag: defaultPath.concat(item.tagText),
          tagNum: item.tagNumber,
        },
      };
      tagList.push(element);
    }
    const feed = xmlbuilder.create(tagList, { encoding: 'utf-8' });
    return res.status(200).send(feed.end({ pretty: true }));
  } catch (error) {
    console.log(error);
    return res.status(400).json(null);
  }
};

Но результат, когда я получил доступ к localhost://9191/api/v1/sitemapTag, представляет собой просто строку, подобную этой:

http://example.com/tag/Cookies 2 http://example.com/tag/Candy 1 http://example.com/tag/Chocolate 3

Затем я попытался использовать: console.log(feed.end({ pretty: true }));, чтобы увидеть, что произошло Мой журнал консоли выглядит так:

<?xml version="1.0" encoding="utf-8"?>
 <sitemap>
   <tag>http://example.com/tag/Cookies</tag>
   <tagNum>2</tagNum>
 </sitemap>
 <sitemap>
   <tag>http://example.com/tag/Candy</tag>
   <tagNum>1</tagNum>
 </sitemap>
 <sitemap>
   <tag>http://example.com/tag/Chocolate</tag>
   <tagNum>3</tagNum>
 </sitemap>

Как я могу решить это правильно?

1 Ответ

0 голосов
/ 21 февраля 2020

Это возможно потому, что вы используете тип контента по умолчанию (html возможно), поэтому все теги скрыты, потому что он интерпретируется как HTML

, вам нужно установить тип контента на text/xml до

res.header("Content-Type", "text/xml");
return res.status(200).send(feed.end({ pretty: true }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...