javascript - DarkSky API - 未处理的拒绝错误 - ReactJS / Axios / Node.js
问题描述
想知道你是否可以帮忙,我对这个很困惑......
我在 React 中有一个旅行应用程序,用户可以在其中在线找到其他用户(一旦找到登录的用户 lat 和 lng)。
找到后,在我的网页应用程序页面上 - 我使用 lng/lng 来浏览 Zomato api 本地信息/餐厅。这曾经有效,但现在我在控制台中收到以下错误......(这曾经有效,但代码没有改变......)
我正在尝试对 DarkSky api 做同样的事情,以获取本地天气数据。而且我的 axios 请求的结构完全相同。但是,这也不起作用。
Failed to load resource: the server responded with a status of 400 ()
app.js:55642 Unhandled rejection Error: Request failed with status code
400
at createError (http://localhost:8000/app.js:9175:15)
at settle (http://localhost:8000/app.js:53028:12)
at XMLHttpRequest.handleLoad (http://localhost:8000/app.js:9048:7)
From previous event:
at Hub._this.getPlaces (http://localhost:8000/app.js:53788:26)
at commitCallbacks (http://localhost:8000/app.js:38450:15)
at commitLifeCycles (http://localhost:8000/app.js:41688:13)
at commitAllLifeCycles (http://localhost:8000/app.js:43345:9)
at HTMLUnknownElement.callCallback
(http://localhost:8000/app.js:32010:14)
at Object.invokeGuardedCallbackDev
(http://localhost:8000/app.js:32048:16)
at invokeGuardedCallback (http://localhost:8000/app.js:32097:29)
at commitRoot (http://localhost:8000/app.js:43484:9)
at completeRoot (http://localhost:8000/app.js:44381:36)
at performWorkOnRoot (http://localhost:8000/app.js:44331:11)
at performWork (http://localhost:8000/app.js:44249:9)
at performSyncWork (http://localhost:8000/app.js:44226:5)
at requestWork (http://localhost:8000/app.js:44126:7)
at scheduleWorkImpl (http://localhost:8000/app.js:44001:13)
printWarning @ app.js:55642
formatAndLogError @ app.js:55358
fireRejectionEvent @ app.js:55383
Promise._notifyUnhandledRejection @ app.js:54829
(anonymous) @ app.js:54808
setTimeout (async)
Promise._ensurePossibleRejectionHandled @ app.js:54807
Promise._reject @ app.js:57521
Promise._settlePromise @ app.js:57447
Promise._settlePromise0 @ app.js:57477
Promise._settlePromises @ app.js:57552
(anonymous) @ app.js:54272
Promise.then (async)
schedule @ app.js:58581
Async.settlePromises @ app.js:54271
Promise._reject @ app.js:57519
Promise._rejectCallback @ app.js:57337
PromiseArray._reject @ app.js:57777
PromiseArray._promiseRejected @ app.js:57797
Promise._settlePromise @ app.js:57439
Promise._settlePromise0 @ app.js:57477
Promise._settlePromises @ app.js:57552
(anonymous) @ app.js:54272
Promise.then (async)
schedule @ app.js:58581
Async.settlePromises @ app.js:54271
Promise._reject @ app.js:57519
Promise._rejectCallback @ app.js:57337
reject @ app.js:59005
geocode:1 Failed to load resource: the server responded with a status
of 404 ()
当我手动插入 lat lng 时,我可以通过 Invision 或其他工具访问数据/api 调用。所以我知道api正在工作。这是一个例子:
https://api.darksky.net/forecast/MY_API_KEY/50.830133,-0.137434
但是,我试图让我的 Axios 请求在我的 react JSX 中工作的方式有问题。
这是我页面的相关代码,(隐藏的 api 键)。
任何帮助都会很棒 - 我不知道为什么我不能以 console.log 天气数据作为起点。
以及为什么我的 zomato 数据没有改变,基于用户 lat lng 坐标。
"class Hub extends React.Component {
state = {
places: null,
articles: null,
user: null,
lat: null,
lng: null,
weather: null
}
setLocation = (lat, lng) => {
console.log('location set...', lat, lng);
this.setState({ lat: lat, lng: lng }, this.getPlaces);
}
getWeather = () => {
const params = {lat: this.state.lat, lng: this.state.lng};
//restaurants
Promise.props({
weather: axios({
url: 'https://api.darksky.net/forecast',
params: params,
json: true,
method: 'GET',
headers: {'user-key': 'MY_API_KEY'}
}).then(res => console.log(res.data))
.catch(err => console.log(err))
})
.then(data => {
this.setState({
weather: data.weather
});
});
}
getPlaces = () => {
const params = { count: 3, lat: 34.019864, lon: -118.490541 };
if(this.state.lat && this.state.lng) {
Object.assign(params, { lat: this.state.lat, lon: this.state.lng });
}
//restaurants
Promise.props({
restaurants: axios({
url: 'https://developers.zomato.com/api/v2.1/geocode',
params: params,
json: true,
method: 'GET',
headers: {'user-key': 'MY_API_KEY'}
}).then(res => res.data),
articles: axios({
url: 'https://developers.zomato.com/api/v2.1/collections',
params: params,
json: true,
method: 'GET',
headers: {'user-key': 'MY_API_KEY'}
}).then(res => res.data)
})
.then(data => {
this.setState({
places: data.restaurants.nearby_restaurants.slice(0, 6),
articles: data.articles.collections
});
});
}
componentDidMount() {
this.getPlaces();
this.getWeather();
}
render() {
etc etc etc
}
解决方案
看起来 API 密钥和坐标应该是路径的一部分。尝试:
weather: axios({
url: `https://api.darksky.net/forecast/${MY_API_KEY}/${params.lat},${params.lng}`, // add api key to the path
json: true,
method: 'GET',
headers: {'user-key': 'MY_API_KEY'}
})
推荐阅读
- java - 如何在 JGROUPS 中禁用 FIFO 和重传协议?
- powershell - 仅压缩文件而非目录
- typescript - 当我使用 Bluebird.promisifyAll 时,打字稿无法推断类型
- c# - 如何访问大括号中的成员 { ID: 1, Name: John }
- text - TermDocumentMatrix 错误罕见字符(西班牙语)
- android - 使用 android studio 的秘密规则访问 Firebase
- angular - Nativescript Beacon 带摄像头
- rust - 使用 hyper 将块流异步写入文件
- jquery - 滚动到指定部分时,如何在 href 添加活动类?
- ios - 无论如何,我可以在使用推送通知杀死我的应用程序后更新它吗?(火力基地 - iOS)