const request = require('request');
var geocodeAddress = (address) => {
var encodedAddress = encodeURIComponent(address);
request({
url: `http://www.mapquestapi.com/geocoding/v1/address?key=APIKey&location=${encodedAddress}`,
json: true
}, (error, response, body) => {
if (error) {
console.log('Unable to connect to Google servers');
} else if (body.results[0].locations[0].postalCode.length < 5) {
console.log('Not a valid length of zip code.')
} else if (body.results[0].locations[0].postalCode < 501) {
console.log('That zip code does not exist')
} else {
console.log('Lat: ' + body.results[0].locations[0].latLng[0])
console.log('Lng: ' + body.results[0].locations[0].latLng[1])
}
});
};
module.exports.geocodeAddress = geocodeAddress;
另一个文件是我用来执行应用程序的文件。
const yargs = require('yargs');
const geocode = require('./geocode/geocode');
const argv = yargs
.options({
a:{
demand: true,
alias: 'Address',
describe: 'Address to fetch weather for',
string: true
}
})
.help()
.argv;
geocode.geocodeAddress(argv.address)
当我在终端中运行第二个时,它表示邮政编码不够长。我将其取出,它吐出下一个错误,我将其取出以及下一个错误。不管我做什么都行不通。在我将其放入函数之前,这段代码已经工作了几分钟。我只是一个初学者,还是Stackoverflow的新手,我一直在不断尝试解决此问题,但是我找不到解决方法,所以我在这里。 LMK如果我的格式有问题,我是该论坛的新手,最重要的是,如果您在代码中看到任何问题,LMK!预先感谢
答案 0 :(得分:2)
看起来您的代码很好,这就是您所期望的数据不正确的原因。
简单的console.log
将向您显示大多数返回的位置均不包含邮政编码。
例如,将所有else if
替换为仅包含else
的{{1}}块。我试了几次;字符串console.dir(body.results[0].locations[0])
返回的内容如下:
Houston
请注意,{
street: '',
adminArea6: '',
adminArea6Type: 'Neighborhood',
adminArea5: 'Houston',
adminArea5Type: 'City',
adminArea4: 'Harris County',
adminArea4Type: 'County',
adminArea3: 'TX',
adminArea3Type: 'State',
adminArea1: 'US',
adminArea1Type: 'Country',
postalCode: '',
geocodeQualityCode: 'A5XAX',
geocodeQuality: 'CITY',
dragPoint: false,
sideOfStreet: 'N',
linkId: '282040105',
unknownInput: '',
type: 's',
latLng: { lat: 29.760803, lng: -95.369506 },
displayLatLng: { lat: 29.760803, lng: -95.369506 },
mapUrl: <redacted>
}
是一个空字符串,将无法满足您所有代码的期望。
此外,共享您的API密钥通常不是一个好主意!请确保您更改自己的权限或设置权限,以限制请求可以来自哪个域。
现在,如果您仅对带有 邮政编码的位置感兴趣,请过滤掉所有其他邮政编码:
postalCode
还值得注意的是,您的代码可能确实适用于特定的字符串。例如,传入let locations = body.results[0].locations;
let locationsOfInterest = locations.filter(location => (location.postalCode !== ''));
会返回一个带有有效邮政编码的地址。