我可以在不评估它们的情况下读取 Javascript/Typescript 中的对象值吗?

我有这个模块


export default () => ({

  environment: process.env.ENVIRONMENT,

  port: process.env.PORT

  database: {

    host: process.env.DATABASE_HOST,

    port: process.env.DATABASE_PORT,

    username: 'postgres',

    password: process.env.DATABASE_PASSWORD,

    database: process.env.DATABASE_NAME,

  },

  awsSqsDefaultQueueUrl: process.env.AWS_SQS_DEFAULT_QUEUE_URL,

  sqsEndpoint: process.env.SQS_ENDPOINT,

})

我想阅读它并创建一个平面键/值对象,仅当值以 开头时才将其键变平process.env,如下所示:


{

  ENVIRONMENT: configuration().environment,

  PORT: configuration().port,

  DATABASE_HOST: configuration().database.host

  DATABASE_PORT: configuration().database.port

  ...

}

database.username不会在新对象键中,因为它的值不是以process.env.


我能想到的唯一方法是在没有评估之前读取键值是通过将文件加载为字符串,然后使用正则表达式解析它。但这感觉不对。


有没有更好的方法来实现这一目标?


浮云间
浏览 88回答 1
1回答

开心每一天1111

这是一个想法:const settings = () => ({    environment: process.env.ENVIRONMENT,    port: process.env.PORT,    database: {        host: process.env.DATABASE_HOST,        port: process.env.DATABASE_PORT,        username: 'postgres',        password: process.env.DATABASE_PASSWORD,        database: process.env.DATABASE_NAME,    },    awsSqsDefaultQueueUrl: process.env.AWS_SQS_DEFAULT_QUEUE_URL,    sqsEndpoint: process.env.SQS_ENDPOINT,});function parseEnvSettings() {    // test values    process.env.ENVIRONMENT = "TEST";    const str = settings.toString();    const pattern = /process\.env\.[a-zA-Z0-9_]+/g;    // get your property names    const matches = [...str.match(pattern).values()];    // build your flat settings object    const parsedSettings = {};    matches.forEach(property => {        parsedSettings[property.substr(property.lastIndexOf(".") + 1)] = eval(property);    });    // here you go    console.log(parsedSettings);}parseEnvSettings();产生:{  ENVIRONMENT: 'TEST',  PORT: undefined,  DATABASE_HOST: undefined,  DATABASE_PORT: undefined,  DATABASE_PASSWORD: undefined,  DATABASE_NAME: undefined,  AWS_SQS_DEFAULT_QUEUE_URL: undefined,  SQS_ENDPOINT: undefined}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript