Files
d1kt/server/config.ts

79 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// server/config.ts
import dotenv from 'dotenv';
// 加载环境变量
dotenv.config();
// 环境变量类型定义
interface Config {
PORT: number;
MONGODB_URI: string;
JWT_SECRET: string;
NODE_ENV: 'development' | 'production' | 'test';
CORS_ORIGIN: string;
}
// 环境变量验证
const requiredEnvVars = ['MONGODB_URI', 'JWT_SECRET'] as const;
for (const envVar of requiredEnvVars) {
if (!process.env[envVar]) {
throw new Error(`Missing required environment variable: ${envVar}`);
}
}
// 配置对象
export const config: Config = {
PORT: parseInt(process.env.PORT || '5001', 10),
MONGODB_URI: process.env.MONGODB_URI!,
JWT_SECRET: process.env.JWT_SECRET || 'your_jwt_secret_key_here',
NODE_ENV: (process.env.NODE_ENV as Config['NODE_ENV']) || 'development',
CORS_ORIGIN: process.env.CORS_ORIGIN || 'http://localhost:3000',
};
// JWT 配置
export const JWT_CONFIG = {
expiresIn: '7d', // token 有效期
issuer: 'typeskill', // 签发者
};
// 数据库配置
export const DB_CONFIG = {
useNewUrlParser: true,
useUnifiedTopology: true,
// 如果需要其他 MongoDB 配置选项,可以在这里添加
};
// API 路径配置
export const API_PATHS = {
AUTH: '/api/auth',
KEYWORDS: '/api/keywords',
CODE_EXAMPLES: '/api/code-examples',
PRACTICE_TYPES: '/api/practice-types',
PRACTICE_RECORDS: '/api/practice-records',
LEADERBOARD: '/api/leaderboard',
ADMIN: {
USERS: '/api/users',
PRACTICE_RECORDS: '/api/practice-records/all'
}
} as const;
// 分页配置
export const PAGINATION = {
DEFAULT_PAGE_SIZE: 10,
MAX_PAGE_SIZE: 100,
} as const;
// 安全配置
export const SECURITY = {
SALT_ROUNDS: 10, // 密码加密轮数
PASSWORD_MIN_LENGTH: 6,
PASSWORD_MAX_LENGTH: 50,
} as const;
// 缓存配置
export const CACHE = {
TTL: 60 * 60, // 1小时
} as const;
// 导出默认配置
export default config;