This commit is contained in:
2025-04-30 19:28:04 +08:00
parent 3f3f08cc4e
commit 26ca4c21c8
11 changed files with 194 additions and 3776 deletions

View File

@@ -1,6 +1,5 @@
import { app } from './index.ts';
import { useConfig } from '@kevisual/use-config/env';
import { config } from './modules/config.ts';
app
.route({
path: 'auth',
@@ -38,7 +37,6 @@ app
})
.addTo(app);
const config = useConfig();
const port = config.PORT || 4000;
console.log('run demo: http://localhost:' + port + '/api/router?path=demo&key=demo');

View File

@@ -1,37 +0,0 @@
import { pino } from 'pino';
import { useConfig } from '@kevisual/use-config/env';
const config = useConfig();
export const logger = pino({
level: config.LOG_LEVEL || 'info',
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'SYS:standard',
ignore: 'pid,hostname',
},
},
serializers: {
error: pino.stdSerializers.err,
req: pino.stdSerializers.req,
res: pino.stdSerializers.res,
},
base: {
app: 'ai-chat',
env: process.env.NODE_ENV || 'development',
},
});
export const logError = (message: string, data?: any) => logger.error({ data }, message);
export const logWarning = (message: string, data?: any) => logger.warn({ data }, message);
export const logInfo = (message: string, data?: any) => logger.info({ data }, message);
export const logDebug = (message: string, data?: any) => logger.debug({ data }, message);
export const log = {
error: logError,
warn: logWarning,
info: logInfo,
debug: logDebug,
};

3
src/modules/config.ts Normal file
View File

@@ -0,0 +1,3 @@
import { useConfig } from '@kevisual/use-config/env';
export const config = useConfig();

View File

@@ -1,27 +1,42 @@
import { Redis } from 'ioredis';
import { config } from './config.ts';
type initRedisOpts = {
onConnect?: () => void; // 连接成功的回调函数
onError?: (msg?: any) => void; // 连接断开的回调函数
};
const initRedis = (config?: any, options?: initRedisOpts) => {
const redis = new Redis({
host: config?.REDIS_HOST || 'localhost', // Redis 服务器的主机名或 IP 地址
port: config?.REDIS_PORT || 6379, // Redis 服务器的端口号
// password: 'your_password', // Redis 的密码 (如果有)
db: 0, // 要使用的 Redis 数据库索引 (0-15)
keyPrefix: '', // key 前缀
retryStrategy(times) {
// 连接重试策略
return Math.min(times * 50, 2000); // 每次重试时延迟增加
},
maxRetriesPerRequest: null, // 允许请求重试的次数 (如果需要无限次重试)
...config, // 其他配置项
});
// 监听连接事件
redis.on('connect', () => {
if (options?.onConnect) {
options.onConnect();
console.log('Redis 连接成功');
}
});
redis.on('error', (err) => {
console.error('Redis 连接错误', err);
if (options?.onError) {
options.onError(err);
}
});
return redis;
};
// 配置 Redis 连接
export const redis = new Redis({
host: 'localhost', // Redis 服务器的主机名或 IP 地址
port: 6379, // Redis 服务器的端口号
// password: 'your_password', // Redis 的密码 (如果有)
db: 0, // 要使用的 Redis 数据库索引 (0-15)
keyPrefix: '', // key 前缀
retryStrategy(times) {
// 连接重试策略
return Math.min(times * 50, 2000); // 每次重试时延迟增加
},
maxRetriesPerRequest: null, // 允许请求重试的次数 (如果需要无限次重试)
});
// 监听连接事件
redis.on('connect', () => {
console.log('Redis 连接成功');
});
redis.on('error', (err) => {
console.error('Redis 连接错误', err);
});
export const redis = useConfigKey('redis', () => initRedis(config));
// 初始化 Redis 客户端
export const redisPublisher = new Redis(); // 用于发布消息

View File

@@ -1,7 +1,6 @@
import { Sequelize } from 'sequelize';
import { useConfig } from '@kevisual/use-config/env';
const config = useConfig();
import { config } from './config.ts';
import { useContextKey } from '@kevisual/use-config/context';
export type PostgresConfig = {
postgres: {
@@ -23,9 +22,13 @@ const postgresConfig = {
port: parseInt(config.POSTGRES_PORT || '5432'),
database: config.POSTGRES_DB || 'postgres',
};
// connect to db
export const sequelize = new Sequelize({
dialect: 'postgres',
...postgresConfig,
// logging: false,
});
export const init = async () => {
return new Sequelize({
dialect: 'postgres',
...postgresConfig,
// logging: false,
});
};
export const sequelize = useContextKey('sequelize', () => init());