node.js - 将请求结果返回给另一个模块
问题描述
我想将 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;
它返回那个国家是未定义的。
解决方案
这里有一些竞争条件,很多人想要对回调进行一些研究,或者最好改用 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
}
})
推荐阅读
- java - 如何在每个场景中运行一个 java 方法
- quarkus - 在 Quarkus 上配置 P6Spy
- php - Laravel:如何使用 select2 将多个数据插入 mysql 数据库?
- python - 值未更新为 dict
- java - Java math.random 查询、取整(概念理解)
- ios - 使用 Core Data 提供的数据(在 SwiftUI 中)并与另一个视图共享
- c# - 如何获取登录用户的 id
- c# - 从第 3 方 API(支付网关)重定向后丢失会话数据
- javascript - Selenium NodeJS中如何依次调用URL并获取每个URL的页面源
- postgresql - 如果您不知道 postgresql 中的表/视图,有没有办法删除它?