Динамически возвращать значение конфигурации (node.js) - PullRequest
0 голосов
/ 06 ноября 2019

Я создаю промежуточное программное обеспечение для контента, которое собирает контент от наших внешних издателей. Издатели будут делиться своим содержимым либо в формате rss, либо в формате json, и поле ключ / значение будет отличаться друг от друга. Чтобы упростить задачу, я создал файл конфигурации, в котором я могу предварительно определить ключ / значение и тип канала. Проблема в том, как я могу динамически вернуть это значение конфигурации на основе имени издателя.

Пример: чтобы получить тип фида Publisher # 1, я просто могу использовать config.articles. rojak_daily .url_feed

мой конфигурационный файл / config / index.js

module.exports = {
    batch:100,
    mysql: {
        database: process.env.database,
        host: process.env.host,
        username: process.env.username,
        password: process.env.password
    },
    articles:{
        rojak_daily:{ // Publisher 1
            url: 'xxx',
            url_feed: 'rss',
            id: null,
            Name: 'title',
            Description: 'description',
            Link: 'link',
            DatePublishFrom: 'pubDate',
            LandscapeImage: 's3image',
            SiteName: 'Rojak Daily',
            SiteLogo: null
        },
        rojak_weekly:{ // publisher 2
            url: 'xxx',
            url_feed: 'json',
            id: null,
            Name: 'Name',
            Description: 'Desc',
            Link: 'link',
            DatePublishFrom: 'pubDate',
            LandscapeImage: 's3image',
            SiteName: 'Rojak Weekly',
            SiteLogo: null
        }
    }
}

мой основной скрипт приложения

const config = require('@config'); // export from config file

class Main {
    constructor(){
      this.publishers = ['rojak_daily','rojak_weekly'];
    }

    // Main process
    async startExport(){
        try{
            for(let publisher of this.publishers){
                const feedType =  await this.getFeedType(publisher)
                const result = (feedType == 'rss')? await this.rss.start(publisher): await this.json.start(publisher)
                return result
            }
        }catch(err){
            console.log("Error occured: ", err)
        }


    }

    // Get feed type from config
    async getFeedType(publisher){
      return await config.articles.rojak_daily.url_feed; 
      // this only return publisher 1 url feed.
      // my concern is to dynamically passing variable 
      // into this config file (example: config.articles.<publisher>.url_feed)
    }

}

module.exports = Main

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019
async getFeedType(publisher){
    return await config.articles[publisher].url_feed; 
}

Вы можете получить доступ к свойствам объектов по переменной

0 голосов
/ 06 ноября 2019

Вы можете либо циклически просматривать статьи, используя Object.entries(articles) или Object.values(articles) в сочетании с Array.prototype.forEach(), либо поскольку у вас уже естьимя издателя, к которому вы можете получить доступ к этой записи с помощью config.articles[publisher].url_feed, например:

const config = {
  articles: {
    rojak_daily: { // Publisher 1
      url: 'xxx',
      url_feed: 'rss',
      id: null,
      Name: 'title',
      Description: 'description',
      Link: 'link',
      DatePublishFrom: 'pubDate',
      LandscapeImage: 's3image',
      SiteName: 'Rojak Daily',
      SiteLogo: null
    },
    rojak_weekly: { // publisher 2
      url: 'xxx',
      url_feed: 'json',
      id: null,
      Name: 'Name',
      Description: 'Desc',
      Link: 'link',
      DatePublishFrom: 'pubDate',
      LandscapeImage: 's3image',
      SiteName: 'Rojak Weekly',
      SiteLogo: null
    }
  }
}

const publishers = ['rojak_daily', 'rojak_weekly']

function getFeedType(publisher) {
  return config.articles[publisher].url_feed; 
}

publishers.forEach(publisher => console.log(getFeedType(publisher)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...