mirror of
https://github.com/34892002/edgeKey.git
synced 2026-09-03 06:47:41 +08:00
fix: error
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user