0

我需要提供一个生成站点地图的端点。

此端点使用“xmlbuilder2”,目标是返回可以传递给浏览器的纯 XML。

  @Get()
  public getSitemapFile(): Promise<any> {
    return new Promise<any>((resolve, reject) => {
      const root: SiteMapRoot = {
        xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9'
      };
      const urlset = create().ele(root.xmlns, 'urlset');

      // urlset.com('Testing things out -- building out items');
      const newUrl: SiteMapDetail = {
        loc: 'https://testsitemapurl.com/',
        lastmod: new Date(),
        changefreq: 'daily'
      };

      urlset
        .ele('url')
          .ele('loc')
            .txt(newUrl.loc).up()
          .ele('lastmod')
            .txt(newUrl.lastmod.toISOString()).up()
          .ele('changefreq')
            .txt(newUrl.changefreq).up();

      const resultXml = urlset.end({ prettyPrint: true });
      console.log(resultXml);

      this.setHeader('Content-Type', 'application/xml');
      resolve(urlset.toString());
    });
  }

预期的响应将是这样的:

<?xml version="1.0"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://testsitemapurl.com/</loc>
    <lastmod>2021-11-23T19:15:10.834Z</lastmod>
    <changefreq>daily</changefreq>
  </url>
</urlset>

但是,收到以下响应:

"<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">
<url>
    <loc>https://testsitemapurl.com/</loc>
    <lastmod>2021-11-23T19:15:10.834Z</lastmod>
    <changefreq>daily</changefreq>
</url>
</urlset>"

让我绊倒的是:

  • 返回类型设置为 XML
  • XML 对象的返回是字符串
    • 这解释了为什么我收到引号中的 XML 字符串值作为响应

我做错了什么(显然有)?我可以使用其他实用程序吗?

4

0 回答 0