reactjs - Next.js 在没有服务器的情况下生成站点地图
问题描述
我在 Next.js 中创建了一个博客。我在将所有页面导出到静态 HTML 文件后托管它。我添加到站点的第一个站点地图是使用 getServerSideProps() 并返回 XML 的站点地图。站点地图是从 Firebase 数据库生成的。每次构建项目时,我都想将站点地图导出为静态。这是我到目前为止所做的,这只是在 React 组件中渲染站点地图。
站点地图.xml.js
import { useState } from "react";
import { parseString } from "xml2js";
import { baseURL } from "../lib/constants";
export const getStaticProps = async () => {
const { db } = await import("../lib/firebase");
const result = await db.collection("root").doc("sitemap").get();
const urls = result.data().urls;
const pages = [];
//loc, lastmod, changefreq, priority
//NO FIRST AND LAST BRACKETS
//loc;lastmod;changefreq;priority
urls.forEach((dataString) => {
const data = dataString.split(";");
pages.push({
loc: data[0],
lastmod: data[1],
changefreq: data[2],
priority: data[3],
});
});
return {
props: {
pages,
},
revalidate: 86400,
};
};
export default function Sitemap({ pages }) {
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<br/>
<br/>
${pages
.map((page) => {
return `
<url>
<br/>
 <loc>${baseURL}/${page.loc}</loc>
<br/>
 <lastmod>${page.lastmod}</lastmod>
<br/>
 <changefreq>${page.changefreq}</changefreq>
<br/>
 <priority>${page.priority}</priority>
<br/>
</url>
<br/>
`;
})
.join("")}
<br/>
</urlset>
`;
const [parsedXML, setParsedXML] = useState(null);
parseString(sitemap, (error, result) => {
console.dir(result);
//setParsedXML(result);
});
return (
<div
dangerouslySetInnerHTML={{
__html: sitemap,
}}
>
</div>
);
}
我想将此站点地图作为适当的 XML 文件。请指教。
PS:将站点地图作为 XML 文件还是仅在 React 组件中显示所有 URL 有区别吗?
谢谢 :):):)
解决方案
推荐阅读
- javascript - 我可以让 src 属性从服务器或调整服务器获取 base64 数据吗?
- excel - 是否有关于如何通过 Excel 中的 VBA 驱动 Office“公式编辑器”的文档?
- android - Scarlet Web 套接字库连接失败
- rust - rust statrs 样本不在范围内?
- python - 如何在 Python 中将浮点列表转换为 int 对列表?
- reactjs - 反应原生
里面 不包装 - api - Rails 5如何为会话创建动作编写api控制器功能测试
- json - 无法从 api 调用中获取 Json 数据
- pdf - PDF复制文本问题:奇怪的字符
- r - 当最后一个时间单位只有 1 个观测值时,R 预测中的 ggseasonplot 不显示预测