mirror of
https://github.com/KwiTsukasa/kt-template-online-api.git
synced 2026-05-27 15:44:54 +08:00
fix(api): 修复WordPress网络异常响应
This commit is contained in:
parent
c8541facd4
commit
755103f403
@ -1,4 +1,4 @@
|
|||||||
import { HttpStatus, Injectable } from '@nestjs/common';
|
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import type { Request, Response as ExpressResponse } from 'express';
|
import type { Request, Response as ExpressResponse } from 'express';
|
||||||
import { throwVbenError } from '@/common';
|
import { throwVbenError } from '@/common';
|
||||||
@ -366,11 +366,15 @@ export class WordpressService {
|
|||||||
|
|
||||||
throwVbenError('WordPress 请求失败', HttpStatus.BAD_GATEWAY);
|
throwVbenError('WordPress 请求失败', HttpStatus.BAD_GATEWAY);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
if (err instanceof HttpException) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
if (err instanceof Error && err.name === 'AbortError') {
|
if (err instanceof Error && err.name === 'AbortError') {
|
||||||
throwVbenError('WordPress 请求超时', HttpStatus.GATEWAY_TIMEOUT);
|
throwVbenError('WordPress 请求超时', HttpStatus.GATEWAY_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw err;
|
this.throwWordpressNetworkError(err);
|
||||||
} finally {
|
} finally {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
}
|
}
|
||||||
@ -441,11 +445,15 @@ export class WordpressService {
|
|||||||
signal: controller.signal,
|
signal: controller.signal,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
if (err instanceof HttpException) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
if (err instanceof Error && err.name === 'AbortError') {
|
if (err instanceof Error && err.name === 'AbortError') {
|
||||||
throwVbenError('WordPress 请求超时', HttpStatus.GATEWAY_TIMEOUT);
|
throwVbenError('WordPress 请求超时', HttpStatus.GATEWAY_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw err;
|
this.throwWordpressNetworkError(err);
|
||||||
} finally {
|
} finally {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
}
|
}
|
||||||
@ -616,6 +624,31 @@ export class WordpressService {
|
|||||||
return `WordPress 请求失败:${status}`;
|
return `WordPress 请求失败:${status}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private throwWordpressNetworkError(err: unknown): never {
|
||||||
|
const message = err instanceof Error ? err.message : '未知错误';
|
||||||
|
const cause = this.getErrorCause(err);
|
||||||
|
|
||||||
|
// fetch 的 DNS、连接拒绝等底层异常不是 HttpException,需要统一转成业务响应。
|
||||||
|
return throwVbenError(
|
||||||
|
cause
|
||||||
|
? `WordPress 网络请求失败:${message}(${cause})`
|
||||||
|
: `WordPress 网络请求失败:${message}`,
|
||||||
|
HttpStatus.BAD_GATEWAY,
|
||||||
|
{
|
||||||
|
code: cause || 'WORDPRESS_NETWORK_ERROR',
|
||||||
|
message,
|
||||||
|
name: err instanceof Error ? err.name : 'Error',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private getErrorCause(err: unknown) {
|
||||||
|
const cause = (err as { cause?: { code?: string; message?: string } })
|
||||||
|
?.cause;
|
||||||
|
|
||||||
|
return cause?.code || cause?.message || '';
|
||||||
|
}
|
||||||
|
|
||||||
private getLoginErrorMessage(html: string) {
|
private getLoginErrorMessage(html: string) {
|
||||||
const match = html.match(/<div[^>]*id=["']login_error["'][^>]*>([\s\S]*?)<\/div>/i);
|
const match = html.match(/<div[^>]*id=["']login_error["'][^>]*>([\s\S]*?)<\/div>/i);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user