49 lines
998 B
TypeScript
49 lines
998 B
TypeScript
|
|
|
|
export interface IConfig {
|
|
mongodbUri: string;
|
|
nodeEnv: string;
|
|
}
|
|
|
|
class Config implements IConfig {
|
|
private static instance: Config;
|
|
|
|
public readonly mongodbUri: string;
|
|
public readonly nodeEnv: string;
|
|
|
|
|
|
private constructor() {
|
|
this.mongodbUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/dailytrends';
|
|
this.nodeEnv = process.env.NODE_ENV || 'development';
|
|
|
|
this.validateConfig();
|
|
}
|
|
|
|
public static getInstance(): Config {
|
|
if (!Config.instance) {
|
|
Config.instance = new Config();
|
|
}
|
|
return Config.instance;
|
|
}
|
|
|
|
private validateConfig(): void {
|
|
if (!this.mongodbUri) {
|
|
throw new Error('MONGODB_URI is required');
|
|
}
|
|
}
|
|
|
|
public isDevelopment(): boolean {
|
|
return this.nodeEnv === 'development';
|
|
}
|
|
|
|
public isProduction(): boolean {
|
|
return this.nodeEnv === 'production';
|
|
}
|
|
|
|
public isTest(): boolean {
|
|
return this.nodeEnv === 'test';
|
|
}
|
|
}
|
|
|
|
export const config = Config.getInstance();
|
|
export default config; |