perf: openapi. error catch

This commit is contained in:
archer
2023-04-10 13:16:24 +08:00
parent a7988c164e
commit 9b1c0e1a3c
8 changed files with 74 additions and 20 deletions

View File

@@ -14,3 +14,30 @@ export const proxyError: Record<string, boolean> = {
ECONNABORTED: true,
ECONNRESET: true
};
export enum ERROR_ENUM {
unAuthorization = 'unAuthorization',
insufficientQuota = 'insufficientQuota'
}
export const ERROR_RESPONSE: Record<
any,
{
code: number;
statusText: string;
message: string;
data?: any;
}
> = {
[ERROR_ENUM.unAuthorization]: {
code: 403,
statusText: ERROR_ENUM.unAuthorization,
message: '凭证错误',
data: null
},
[ERROR_ENUM.insufficientQuota]: {
code: 403,
statusText: ERROR_ENUM.insufficientQuota,
message: '账号余额不足',
data: null
}
};

View File

@@ -1,5 +1,5 @@
import { NextApiResponse } from 'next';
import { openaiError, openaiError2, proxyError } from './errorCode';
import { openaiError, openaiError2, proxyError, ERROR_RESPONSE } from './errorCode';
export interface ResponseType<T = any> {
code: number;
@@ -18,7 +18,14 @@ export const jsonRes = <T = any>(
) => {
const { code = 200, message = '', data = null, error } = props || {};
let msg = message;
const errResponseKey = typeof error === 'string' ? error : error?.message;
// Specified error
if (ERROR_RESPONSE[errResponseKey]) {
return res.json(ERROR_RESPONSE[errResponseKey]);
}
// another error
let msg = message || error?.message;
if ((code < 200 || code >= 400) && !message) {
msg = error?.message || '请求错误';
if (typeof error === 'string') {
@@ -40,7 +47,8 @@ export const jsonRes = <T = any>(
res.json({
code,
statusText: '',
message: msg,
data
data: data || error || null
});
};

View File

@@ -1,11 +1,11 @@
import type { NextApiRequest } from 'next';
import crypto from 'crypto';
import jwt from 'jsonwebtoken';
import tunnel from 'tunnel';
import { ChatItemType } from '@/types/chat';
import { encode } from 'gpt-token-utils';
import { OpenApi, User } from '../mongo';
import { formatPrice } from '@/utils/user';
import { ERROR_ENUM } from '../errorCode';
/* 密码加密 */
export const hashPassword = (psw: string) => {
@@ -49,20 +49,20 @@ export const authOpenApiKey = async (req: NextApiRequest) => {
const { apikey: apiKey } = req.headers;
if (!apiKey) {
return Promise.reject('api key is empty');
return Promise.reject(ERROR_ENUM.unAuthorization);
}
try {
const openApi = await OpenApi.findOne({ apiKey });
if (!openApi) {
return Promise.reject('api key is error');
return Promise.reject(ERROR_ENUM.unAuthorization);
}
const userId = String(openApi.userId);
// 余额校验
const user = await User.findById(userId);
if (!user) {
return Promise.reject('user is empty');
return Promise.reject(ERROR_ENUM.unAuthorization);
}
if (formatPrice(user.balance) <= 0) {
return Promise.reject('Insufficient account balance');