NextJS/vercel - 504 错误 'FUNCTION_INVOCATION_TIMEOUT'
NextJS / vercel - 504 Error 'FUNCTION_INVOCATION_TIMEOUT'
部署到 Vercel 后我的一个页面出现此错误,在开发模式下一切正常。
我认为问题可能出在我的 fetch/APIs 上,因为它使用第一个提取请求中的数据作为第二个提取请求的 URL...
我所有其他具有不同 API/获取请求的页面都工作正常...
export const fetchData = async (page) => {
try {
const req = await fetch(
"https://www.productpage.com/new/" +
page
);
const html = await req.text();
const $ = cheerio.load(html);
let newProducts = [];
for (let i = 1; i < 25; i++) {
let name = $(`#product_listing > tbody > #_${i} > td:nth-child(2) > a`)
.text()
.replace(/\n/g, "");
let pageSrc = $(
`#product_listing > tbody > #_${i} > td:nth-child(2) > a`
).attr("href");
const price = $(`#product_listing > tbody >#_${i} > td.price.notranslate`)
.text()
.replace(/\n/g, "");
pageSrc = "https://www.productpage.com" + pageSrc;
const req2 = await fetch(pageSrc); // here it is using data from first fetch for a 2nd request..
const html2 = await req2.text();
const = cheerio.load(html2);
const imageSrc = (
"#product-main-image .main-image-inner:first-child img"
).attr("src");
const name2 = ("#product-details dd:nth-child(2)")
.text()
.replace(/\n/g, "");
const brand = ("#product-details dd:nth-child(4)")
.text()
.replace(/\n/g, "");
newProducts.push({
name: name,
name2: name2,
brand: brand,
pageSrc: pageSrc,
price: price,
imageSrc: imageSrc,
});
}
return newProducts;
} catch (err) {}
};
module.exports = {
fetchData,
};
此错误表明 API 响应响应时间过长。
使用带有 Hobby
计划的 Vercel 时,您的无服务器 API 路由可以 only be processed for 5 seconds。这意味着 5 秒后,路由会返回 504 GATEWAY TIMEOUT
错误。
当 运行 在本地使用 next dev
时,这些相同的限制不适用。
要解决此问题,您需要减少 API 路由响应所需的时间,或者升级您的 Vercel 计划。
部署到 Vercel 后我的一个页面出现此错误,在开发模式下一切正常。
我认为问题可能出在我的 fetch/APIs 上,因为它使用第一个提取请求中的数据作为第二个提取请求的 URL...
我所有其他具有不同 API/获取请求的页面都工作正常...
export const fetchData = async (page) => {
try {
const req = await fetch(
"https://www.productpage.com/new/" +
page
);
const html = await req.text();
const $ = cheerio.load(html);
let newProducts = [];
for (let i = 1; i < 25; i++) {
let name = $(`#product_listing > tbody > #_${i} > td:nth-child(2) > a`)
.text()
.replace(/\n/g, "");
let pageSrc = $(
`#product_listing > tbody > #_${i} > td:nth-child(2) > a`
).attr("href");
const price = $(`#product_listing > tbody >#_${i} > td.price.notranslate`)
.text()
.replace(/\n/g, "");
pageSrc = "https://www.productpage.com" + pageSrc;
const req2 = await fetch(pageSrc); // here it is using data from first fetch for a 2nd request..
const html2 = await req2.text();
const = cheerio.load(html2);
const imageSrc = (
"#product-main-image .main-image-inner:first-child img"
).attr("src");
const name2 = ("#product-details dd:nth-child(2)")
.text()
.replace(/\n/g, "");
const brand = ("#product-details dd:nth-child(4)")
.text()
.replace(/\n/g, "");
newProducts.push({
name: name,
name2: name2,
brand: brand,
pageSrc: pageSrc,
price: price,
imageSrc: imageSrc,
});
}
return newProducts;
} catch (err) {}
};
module.exports = {
fetchData,
};
此错误表明 API 响应响应时间过长。
使用带有 Hobby
计划的 Vercel 时,您的无服务器 API 路由可以 only be processed for 5 seconds。这意味着 5 秒后,路由会返回 504 GATEWAY TIMEOUT
错误。
当 运行 在本地使用 next dev
时,这些相同的限制不适用。
要解决此问题,您需要减少 API 路由响应所需的时间,或者升级您的 Vercel 计划。