NextJs 动态站点地图为什么会出现 504 错误?
NextJs Dynamic sitemap why get 504 error?
我有一个组件可以像下面的代码一样动态创建站点地图。
问题是这段代码在我的本地主机上工作得很好,但是当它部署在服务器上时,我总是得到 Gateway Timeout-504 错误!
有什么建议是我做错了什么吗?
import fetch from "isomorphic-unfetch";
import React from "react";
import {getCategoryPath} from "../helpers/Converters";
const EXTERNAL_DATA_URL = "http://www.my.site";
const createSitemap = (items: any) => `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${items
.map((item: any) => {
return `
<url>
<loc>${EXTERNAL_DATA_URL}/${getCategoryPath(item.CategoryName)}/Detail?id=${item.Id}</loc>
<priority>${item.Priority}</priority>
<changefreq>${item.ChangeFreq}</changefreq>
<lastmod>${item.LastMod}</lastmod>
</url>
`;
})
.join("")}
</urlset>
`;
class Sitemap extends React.Component {
static async getInitialProps({res}: any) {
const response = await fetch(`${EXTERNAL_DATA_URL}:5000/api/SiteMap`);
const posts = await response.json();
res.setHeader("Content-Type", "text/xml");
res.write(createSitemap(posts));
res.end();
}
}
export default Sitemap;
问题实际上与 Nginx 有关,由于我的 Nginx 配置,我在内部将所有 /api* 路由到端口 5000,因此在获取数据时解决端口是额外的,因此将相关行更改为此,解决我的问题:
const response = await fetch(`${EXTERNAL_DATA_URL}/api/SiteMap`);
我有一个组件可以像下面的代码一样动态创建站点地图。 问题是这段代码在我的本地主机上工作得很好,但是当它部署在服务器上时,我总是得到 Gateway Timeout-504 错误! 有什么建议是我做错了什么吗?
import fetch from "isomorphic-unfetch";
import React from "react";
import {getCategoryPath} from "../helpers/Converters";
const EXTERNAL_DATA_URL = "http://www.my.site";
const createSitemap = (items: any) => `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${items
.map((item: any) => {
return `
<url>
<loc>${EXTERNAL_DATA_URL}/${getCategoryPath(item.CategoryName)}/Detail?id=${item.Id}</loc>
<priority>${item.Priority}</priority>
<changefreq>${item.ChangeFreq}</changefreq>
<lastmod>${item.LastMod}</lastmod>
</url>
`;
})
.join("")}
</urlset>
`;
class Sitemap extends React.Component {
static async getInitialProps({res}: any) {
const response = await fetch(`${EXTERNAL_DATA_URL}:5000/api/SiteMap`);
const posts = await response.json();
res.setHeader("Content-Type", "text/xml");
res.write(createSitemap(posts));
res.end();
}
}
export default Sitemap;
问题实际上与 Nginx 有关,由于我的 Nginx 配置,我在内部将所有 /api* 路由到端口 5000,因此在获取数据时解决端口是额外的,因此将相关行更改为此,解决我的问题:
const response = await fetch(`${EXTERNAL_DATA_URL}/api/SiteMap`);