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

使用变量调用Yahoo Weather API查询失败问题求助

解决YQL查询中Cannot read property 'results' of undefined的问题

这个问题我之前做类似天气查询功能时碰到过,核心原因就是YQL查询语句的语法错误,给你一步步理清楚:

问题根源

当你用模板字符串插入${place}变量时,生成的SQL语句里text= ${place}部分没给字符串值加引号。比如如果place的值是Broomfield, Co,实际生成的查询会是:

SELECT * FROM weather.forecast WHERE woeid in (SELECT woeid FROM geo.places(1) WHERE text= Broomfield, Co)

这显然不符合SQL语法规范——字符串类型的条件值必须用引号包裹。而你手动写text= "Broomfield, Co"时加了引号,语法正确,所以能正常返回结果。当YQL收到语法错误的查询时,返回的响应对象里根本没有results属性,这时候你去访问它自然就会抛出Cannot read property 'results' of undefined的错误。

修复方案

给模板字符串里的${place}加上双引号,确保生成的查询语句语法正确:

const query = new YQL(`SELECT * FROM weather.forecast WHERE woeid in (SELECT woeid FROM geo.places(1) WHERE text= "${place}")`)

如果你的place变量可能包含用户输入的双引号(比如特殊地名),为了避免再次触发语法错误,最好先对变量做转义处理:

// 转义字符串里的双引号
const escapedPlace = place.replace(/"/g, '\\"');
const query = new YQL(`SELECT * FROM weather.forecast WHERE woeid in (SELECT woeid FROM geo.places(1) WHERE text= "${escapedPlace}")`)

额外优化建议

为了让你的命令更健壮,在处理YQL响应时,先做一下存在性检查,避免因为查询失败直接崩溃:

// 假设你执行查询后得到response对象
if (!response || !response.results) {
    // 给用户反馈错误信息
    return message.reply(`找不到地点「${place}」的天气数据,请检查地点名称是否正确~`);
}
// 正常处理天气结果逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:37