Визуализация метода из класса с помощью узла express - PullRequest
3 голосов
/ 21 апреля 2019

У меня есть класс с методами, которые должны предоставлять мне домены API. Это также работает до сих пор. Но если я хочу сделать это с помощью Node Express, я получу массив с 1.2.3. без доменного имени.

Я думаю, что моя проблема находится в асинхронном ожидании?!

Вот фрагмент из моего метода класса:

class ISPConfig {
    constructor(base_url, options) {
        this.base_url = base_url;
        this.options = options;
    }

    async _call() {
        ... // gives me the sessionId
    }

    async getDataByPrimaryId(ispFunction, param) {
        try {
        const results = await axios.post(this.base_url + ispFunction, {
            session_id: await this._call(),
            primary_id: param
        });
        return await results.data.response;
        //console.log(results.data.response);
        } catch (err){
            console.log(err);
        }
    }

И ее фрагмент из моего app.js:

const renderHome = (req, res) => {
    let domains = [],
        message = '';
    let a = new ispwrapper.ISPConfig(BASE_URL, OPTIONS)
    a.getDataByPrimaryId('sites_web_domain_get', { active: 'y' })
        .then(response => {
            for (let i = 0; i < response.length; i++){
                domains = response[i]['domain'].domains;
            }
        })
        .catch(err => {
            message = 'Error when retriving domains from ISPApi';
        })
        .then(() => {
            res.render('home', { // 'home' template file for output render
                title: 'ISPConfig',
                heading: 'Welcome to my ISPConfig Dashboard',
                homeActive: true,
                domains,
                message
            });
        });
};

С помощью push (domains) я попадаю на HTML-страницу только 1.2.3.

Что в точности соответствует трем активным доменам моего API. Но только без доменных имен. (

Но если я выведу сообщение для цикла console.log (response [i] ['domain']. Domains), я получу все домены с именами в консоли.

Кто-нибудь видит мою ошибку?

Вот мое решение:

const renderHome = async (req, res) => {
let domain = [],
    message = '';
try {
    let a = new ispwrapper.ISPConfig(BASE_URL, OPTIONS);
    const response = await a.getDataByPrimaryId('sites_web_domain_get', { active: 'y' });

    for (let i = 0; i < response.length; i++){
         domain.push(response[i].domain);
    }
} catch(err) {
    message = 'Error when retriving domains from ISPApi';
} finally {
    res.render('home', { // 'home' template file for output render
        title: 'ISPConfig',
        heading: 'Welcome to my ISPConfig Dashboard',
        homeActive: true,
        domain,
        message
    });
}

};

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

Попробуйте сделать маршрут асинхронным, например:

const renderHome = async (req, res) => {
  let domains = [],
      message = '';
  try {
    let a = new ispwrapper.ISPConfig(BASE_URL, OPTIONS)
    const response = await a.getDataByPrimaryId('sites_web_domain_get', { active: 'y' })

    for (let i = 0; i < response.length; i++){
      domains.push(response[i].domain);
    }
  } catch(err) {
    message = 'Error when retriving domains from ISPApi';
  } finally {
    res.render('home', { // 'home' template file for output render
      title: 'ISPConfig',
      heading: 'Welcome to my ISPConfig Dashboard',
      homeActive: true,
      domains,
      message
    });
  }
};
0 голосов
/ 21 апреля 2019

Да, хорошо, неопределенное больше не проблема.Но как мне получить домены, отображаемые на HTML-странице?Вызов серый.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...