OK!有些事情正在逃避我。
我的顶点项目旨在为我们家外的BnB增值。我们希望将一个工具放在我们的客人手中,这将使他们能够看到我们地区的现在和下周的天气,以便他们可以计划在该地区冒险时穿什么。我们希望他们能够查找当地的餐馆,并找到有助于他们决定去哪里吃饭的评论(我们是BnB,我们不喂它们)。最后,我们希望他们能够查找所有当地的“去处”和“要看的东西”。
所有这些功能都基于地理定位,需要我们的地址作为基地和我们的位置坐标。
我正在尝试构建一个将返回三件事的模块:
geocode.loc (which is the human readable geocode location)
geocode.lat (which is the latitude associated with the location)
geocode.lng (which is the longitude associated with the location)
这些数据点将在我的应用程序中传递给我正在使用的其他apis:
a 'weather' api to return local weather
a 'restaurants' api to return local restaurants
an 'attractions' api to return local attractions
以下是有问题的代码:
'use strict';
// this module connects to the Google geocode api and returns the formatted address and latitude/longitude for an address passed to it
const request = require('request'),
req_prom = require('request-promise');
const config = require('../data/config.json');
const geocode_loc = 'Seattle, WA';
const geocode_key = config.GEOCODE_KEY;
const options = {
url: `https://maps.google.com/maps/api/geocode/json?address=${geocode_loc}&key=${geocode_key}`,
json: true
};
let body = {};
let geocode = request(options, (err, res, body) => {
if (!err && res.statusCode === 200) {
body = {
loc: body.results[0].formatted_address,
lat: body.results[0].geometry.location.lat,
lng: body.results[0].geometry.location.lng
};
return body;
}
});
module.exports.geocode = geocode;
答案 0 :(得分:2)
您正在编写异步代码。当您导出geocode
时,该值尚未设置。
您应该导出一个函数,而不是导出geocode
值。该函数应该采用回调(就像request
)或使用Promises,或使用async / await。
这就是我写这个的方式:
let geocode = () => {
return new Promise((rej, res) => {
request(options, (err, res, body) => {
if (!err && res.statusCode === 200) {
const body = {
loc: body.results[0].formatted_address,
lat: body.results[0].geometry.location.lat,
lng: body.results[0].geometry.location.lng
};
res(body);
}
}
});
然后,从其他模块中,您可以调用地理编码功能,并在请求完成时使用then()
执行某些操作。