58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { json, type TypedResponse } from '@remix-run/node';
|
|
import type { ApiResponse } from '~/types/global';
|
|
|
|
/**
|
|
* 创建标准化的 API 响应
|
|
*
|
|
* @param data 响应数据
|
|
* @param message 响应消息
|
|
* @param status HTTP 状态码,默认为 200
|
|
* @returns 标准化的 API 响应
|
|
*/
|
|
export function apiResponse<T = any>(
|
|
status: number = 200,
|
|
data?: T,
|
|
message?: string,
|
|
success: boolean = true,
|
|
headers?: HeadersInit,
|
|
): TypedResponse<ApiResponse<T>> {
|
|
const finalSuccess = success ?? (status >= 200 && status < 300);
|
|
|
|
const responseBody: ApiResponse<T> = {
|
|
success: finalSuccess,
|
|
...(data !== undefined ? { data } : {}),
|
|
...(message !== undefined ? { message } : {}),
|
|
};
|
|
|
|
return json(responseBody, { status, headers });
|
|
}
|
|
|
|
/**
|
|
* 创建成功的 API 响应
|
|
* @param data 响应数据
|
|
* @param message 成功消息
|
|
* @returns 成功的 API 响应
|
|
*/
|
|
export function successResponse<T = any>(
|
|
data?: T,
|
|
message?: string,
|
|
headers?: HeadersInit,
|
|
): TypedResponse<ApiResponse<T>> {
|
|
return apiResponse(200, data, message, true, headers);
|
|
}
|
|
|
|
/**
|
|
* 创建错误的 API 响应
|
|
* @param message 错误消息
|
|
* @param status HTTP 状态码,默认为 400
|
|
* @param data 额外的错误数据
|
|
* @returns 错误的 API 响应
|
|
*/
|
|
export function errorResponse<T = any>(
|
|
status: number = 400,
|
|
errorDetails?: string,
|
|
headers?: HeadersInit,
|
|
): TypedResponse<ApiResponse<T>> {
|
|
return apiResponse<T>(status, undefined, errorDetails, false, headers);
|
|
}
|