我需要提供一个生成站点地图的端点。
此端点使用“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 字符串值作为响应
我做错了什么(显然有)?我可以使用其他实用程序吗?