fix: error

This commit is contained in:
ggyy
2026-07-13 20:56:30 +08:00
parent ce858ca1fe
commit 0637094191
3 changed files with 18 additions and 26 deletions

View File

@@ -155,18 +155,6 @@ export function toTelefuncErrorPayload(error: unknown) {
return toErrorResponsePayload(error);
}
export function throwTelefuncError(error: unknown): never {
const appError = toAppError(error);
const payload = toErrorResponsePayload(appError);
// Telefunc 需要通过 Abort 抛出错误才能正确序列化给客户端
const AbortError = Error as any;
const abortError = new AbortError(payload.message);
abortError.isAbort = true;
abortError.abortValue = payload;
throw abortError;
}
function getTelefuncAbortValue(error: unknown): TelefuncAbortValue | null {
if (!(error instanceof Error)) {
return null;

View File

@@ -1,6 +1,4 @@
import { createOrder } from "../../../modules/order/service";
import { logger } from "../../../lib/logger";
import { throwTelefuncError } from "../../../lib/app-error";
import type { PaymentProvider } from "../../../modules/payment/types";
export async function onCreateOrder(input: {
@@ -14,14 +12,5 @@ export async function onCreateOrder(input: {
receiverInfo?: string;
discountCode?: string;
}) {
try {
return await createOrder(input);
} catch (error) {
logger.error(error instanceof Error ? error : new Error(String(error)), {
event: "createOrder.failed",
paymentProvider: input.paymentProvider,
productId: input.productId,
});
throwTelefuncError(error);
}
return await createOrder(input);
}

View File

@@ -33,10 +33,25 @@ export const telefuncHandler: UniversalHandler = enhance(
});
const { body, statusCode, contentType } = httpResponse;
if (statusCode === 500 && "err" in httpResponse) {
logger.error(httpResponse.err instanceof Error ? httpResponse.err : new Error(String(httpResponse.err)), {
if (statusCode >= 400 && "err" in httpResponse) {
const error = httpResponse.err;
logger.error(error instanceof Error ? error : new Error(String(error)), {
event: "telefunc.unhandled",
});
// 手动构造错误响应,确保客户端能收到具体错误信息
const errorPayload = {
message: error instanceof Error ? error.message : String(error),
code: (error as any)?.code,
statusCode: (error as any)?.statusCode || statusCode,
};
return new Response(JSON.stringify(errorPayload), {
status: statusCode,
headers: {
"content-type": "application/json; charset=utf-8",
},
});
}
return new Response(body, {
status: statusCode,