我想将一些内容从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;
返回未定义的国家/地区。
答案 0 :(得分:0)
您在这里遇到了一些竞争条件,您许多人希望对回调进行一些研究,或者更好地改用Promise。另外,您可能希望导出函数而不是变量,这样您的代码将更可重用。
这里有一个使用诺言的例子。注意我正在按照请求文档中的建议使用request-promise-native。您还需要安装该依赖项才能使用它。
在您的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
}
})