Spaces:
Running
Running
import path from 'path'; | |
import fs from 'fs-extra'; | |
import yaml from 'yaml'; | |
import _ from 'lodash'; | |
import environment from '../environment.ts'; | |
import util from '../util.ts'; | |
const CONFIG_PATH = path.join(path.resolve(), 'configs/', environment.env, "/service.yml"); | |
/** | |
* 服务配置 | |
*/ | |
export class ServiceConfig { | |
/** 服务名称 */ | |
name: string; | |
/** @type {string} 服务绑定主机地址 */ | |
host; | |
/** @type {number} 服务绑定端口 */ | |
port; | |
/** @type {string} 服务路由前缀 */ | |
urlPrefix; | |
/** @type {string} 服务绑定地址(外部访问地址) */ | |
bindAddress; | |
constructor(options?: any) { | |
const { name, host, port, urlPrefix, bindAddress } = options || {}; | |
this.name = _.defaultTo(name, 'deepseek-free-api'); | |
this.host = _.defaultTo(host, '0.0.0.0'); | |
this.port = _.defaultTo(port, 5566); | |
this.urlPrefix = _.defaultTo(urlPrefix, ''); | |
this.bindAddress = bindAddress; | |
} | |
get addressHost() { | |
if(this.bindAddress) return this.bindAddress; | |
const ipAddresses = util.getIPAddressesByIPv4(); | |
for(let ipAddress of ipAddresses) { | |
if(ipAddress === this.host) | |
return ipAddress; | |
} | |
return ipAddresses[0] || "127.0.0.1"; | |
} | |
get address() { | |
return `${this.addressHost}:${this.port}`; | |
} | |
get pageDirUrl() { | |
return `http://127.0.0.1:${this.port}/page`; | |
} | |
get publicDirUrl() { | |
return `http://127.0.0.1:${this.port}/public`; | |
} | |
static load() { | |
const external = _.pickBy(environment, (v, k) => ["name", "host", "port"].includes(k) && !_.isUndefined(v)); | |
if(!fs.pathExistsSync(CONFIG_PATH)) return new ServiceConfig(external); | |
const data = yaml.parse(fs.readFileSync(CONFIG_PATH).toString()); | |
return new ServiceConfig({ ...data, ...external }); | |
} | |
} | |
export default ServiceConfig.load(); |