fix: 改进网络错误检测 - 检查error.cause中的EHOSTUNREACH等错误码

This commit is contained in:
Your Name 2025-12-29 00:13:36 +08:00
parent 30a0c09cf3
commit d38ee5d98b

View File

@ -212,6 +212,7 @@ export async function POST(request: NextRequest) {
// 检查是否是网络连接错误
if (fetchError instanceof Error) {
// 检查超时错误
if (fetchError.name === 'AbortError') {
return NextResponse.json(
{
@ -222,14 +223,28 @@ export async function POST(request: NextRequest) {
);
}
if (fetchError.message.includes('EHOSTUNREACH') ||
fetchError.message.includes('ENOTFOUND') ||
fetchError.message.includes('ECONNREFUSED') ||
fetchError.message.includes('No route to host')) {
// 检查错误消息和cause中的网络错误
const errorMessage = fetchError.message || '';
const errorCause = (fetchError as any).cause;
const causeMessage = errorCause?.message || '';
const causeCode = errorCause?.code || '';
// 检查各种网络连接错误
if (errorMessage.includes('EHOSTUNREACH') ||
errorMessage.includes('ENOTFOUND') ||
errorMessage.includes('ECONNREFUSED') ||
errorMessage.includes('No route to host') ||
causeMessage.includes('EHOSTUNREACH') ||
causeMessage.includes('ENOTFOUND') ||
causeMessage.includes('ECONNREFUSED') ||
causeMessage.includes('No route to host') ||
causeCode === 'EHOSTUNREACH' ||
causeCode === 'ENOTFOUND' ||
causeCode === 'ECONNREFUSED') {
return NextResponse.json(
{
error: "无法连接到抠图API服务器",
detail: `服务器无法访问 ${apiUrl},请检查:\n1. API服务器是否在线\n2. 网络连接是否正常\n3. 防火墙设置是否正确`,
detail: `服务器无法访问 ${apiUrl},请检查:\n1. API服务器是否在线\n2. 网络连接是否正常\n3. 防火墙设置是否正确\n4. 端口8000是否已开放`,
},
{ status: 503 }
);