You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ember调用Dark Sky天气API时遭遇404错误,求排查原因

解决Dark Sky API请求404错误的问题

首先,你的核心问题是请求URL的格式不符合Dark Sky API的要求,这直接导致了404错误。我们来一步步拆解和修复:

1. 错误的URL结构分析

你当前的请求URL是:

https://api.darksky.net/forecast?key=secretString&latitude=42.361145&longitude=-71.057083&time=1525213510

但Dark Sky API要求把API密钥、经纬度(可选带时间)作为路径参数,而不是查询参数(?key=xxx这种形式)。

2. 正确的URL格式

正确的请求URL格式应该是:

https://api.darksky.net/forecast/[你的API密钥]/[纬度],[经度],[时间]

对应你的参数,正确的URL应该是:

https://api.darksky.net/forecast/secretString/42.361145,-71.057083,1525213510

3. 调整Ember Data的请求配置

因为你用了Ember Data,需要修改适配器来生成符合要求的URL。比如创建一个针对天气模型的适配器(假设模型名为weather):

// app/adapters/weather.js
import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  host: 'https://api.darksky.net',
  pathForType() {
    return 'forecast';
  },
  urlForFindRecord(id, modelName, snapshot) {
    // 建议将API密钥存到环境变量,不要硬编码
    const apiKey = 'secretString'; 
    const { latitude, longitude, time } = snapshot.record;
    return `${this.host}/${this.pathForType()}/${apiKey}/${latitude},${longitude},${time}`;
  }
});

4. 修复模型代码的小错误

你的模型里temperature属性少了DS.attr方法,应该修改为:

import DS from 'ember-data';

export default DS.Model.extend({
  temperature: DS.attr('number'), // 补上DS.attr
  summary: DS.attr('string'),
  icon: DS.attr('string')
});

额外提醒

  • 不要把API密钥硬编码到代码里,建议用Ember的环境变量(config/environment.js)管理,比如在配置文件里添加ENV.darkSkyApiKey = '你的密钥',再在适配器里引用this.get('darkSkyApiKey')。
  • 注意Dark Sky API已被Apple收购,后续可能有服务变更,留意官方的最新说明。

内容的提问来源于stack exchange,提问作者user6506263

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:09:10