Возврат результата запроса в другой модуль - PullRequest
0 голосов
/ 14 июня 2019

Я хотел бы вернуть часть тела из запроса, сделанного в request.js, в модуль, который вызывает его в app.js

Я пытался использовать module.exports для сохранения информации в теле. Я знаю, что запрос является асинхронным, поэтому мне приходится ждать его возвращения, но я не уверен, как это сделать.

Мой файл app.js:

const yargs = require('yargs');
const fs = require('fs');


const argv = yargs.
options({
    capcity: {
        description: 'capital city',
        alias: 'c',
        demand: true
    }
})
.help()
.argv;

module.exports.capcity = argv.capcity;

const requestData = require('./requestData.js');

console.log(requestData.country);

Мой файл requestData.js:

const request = require('request');
const app = require('./app.js');

var country;

request({
    url: `https://restcountries.eu/rest/v2/capital/${app.capcity}`,
    json: true
}
, (error, response, body) => {

    console.log(app.capcity);
    if (error) {
        console.log('error:', error);
    } else if (body.status == 404) {
        console.log(JSON.stringify(body, undefined, 2));
        console.log("invalid city entered");
    } else {
        country = {
            name: body[0].name,
            code: body[0].currencies[0].code,
            symbol: body[0].currencies[0].symbol
        }
        country = JSON.stringify(country);
        console.log(country);
    }
});

module.exports.country = country;

Возвращает, что страна не определена.

1 Ответ

0 голосов
/ 14 июня 2019

У вас здесь есть некоторые условия гонки, вы многие хотите немного изучить обратные вызовы, или, что еще лучше, переключиться на использование обещаний.Также вы можете захотеть экспортировать функции вместо переменных, ваш код будет более пригоден для повторного использования.

Вот пример использования обещаний.примечание: я использую запрос-обещание-нативный как предложено в документации по запросу.вам нужно будет установить эту зависимость, чтобы использовать это.

В вашем app.js

const yargs = require('yargs');
const fs = require('fs');


const argv = yargs.
options({
    capcity: {
        description: 'capital city',
        alias: 'c',
        demand: true
    }
})
.help()
.argv;

const capcity = argv.capcity;

const requestDataFile = require('./requestData.js');

requestDataFile.requestData(capcity).then(country=>{
    console.log(country)
})

В вашем файле requestData

const request = require('request-promise-native');
const app = require('./app.js');


module.exports.requestData = (capcity)=>request({
        url: `https://restcountries.eu/rest/v2/capital/${capcity}`,
        json: true
    }).then((body)=>{
        return country = {
            name: body[0].name,
            code: body[0].currencies[0].code,
            symbol: body[0].currencies[0].symbol
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...