TypeError:无法读取未定义的nodejs请求http的属性'0'

Posted

技术标签:

【中文标题】TypeError:无法读取未定义的nodejs请求http的属性\'0\'【英文标题】:TypeError: cannot read property '0' of undefined nodejs request httpTypeError:无法读取未定义的nodejs请求http的属性'0' 【发布时间】:2021-12-09 04:00:02 【问题描述】:

我正在尝试使用从 API 检索 JSON 的不同命令来扩展我的 Discord Bot。它适用于前几个,例如:

case 'results':
                request('http://ergast.com/api/f1/'+args[2]+'/'+args[3]+'/results.json', (error, response, body) => 
                    if(error) msg.reply(error); 
                    const temp = JSON.parse(body);
                    let answer = '';
                    try 
                        for(var i = 0; i < temp.MRData.RaceTable.Races[0].Results.length; i++) 
                            answer += (i+1)+'. ' 
                                + temp.MRData.RaceTable.Races[0].Results[i].Driver.givenName +' '
                                + temp.MRData.RaceTable.Races[0].Results[i].Driver.familyName + ', ' 
                                + temp.MRData.RaceTable.Races[0].Results[i].Constructor.name + '\n';
                        
                    catch(error) 
                        console.log(error);
                        answer = 'Choose earlier race, no results in yet';
                       
                    msg.reply(answer);
                );
                break;

所以这很有效,很好。当我尝试从另一个 API 调用(f1 赛季的车手排名)中获取其他值时,我在 Heroku Deployed Discordbot 上遇到了以下日志:

2021-10-22T13:35:57.470709+00:00 app[worker.1]: TypeError: Cannot read property '0' of undefined
    2021-10-22T13:35:57.470710+00:00 app[worker.1]:     at Request._callback (/app/index.js:254:73)
    2021-10-22T13:35:57.470710+00:00 app[worker.1]:     at Request.self.callback (/app/node_modules/request/request.js:185:22)
    2021-10-22T13:35:57.470710+00:00 app[worker.1]:     at Request.emit (events.js:400:28)
    2021-10-22T13:35:57.470711+00:00 app[worker.1]:     at Request.<anonymous> (/app/node_modules/request/request.js:1161:10)
    2021-10-22T13:35:57.470711+00:00 app[worker.1]:     at Request.emit (events.js:400:28)
    2021-10-22T13:35:57.470711+00:00 app[worker.1]:     at IncomingMessage.<anonymous> (/app/node_modules/request/request.js:1083:12)
        2021-10-22T13:35:57.470712+00:00 app[worker.1]:     at Object.onceWrapper (events.js:519:28)
        2021-10-22T13:35:57.470712+00:00 app[worker.1]:     at IncomingMessage.emit (events.js:412:35)
        2021-10-22T13:35:57.470712+00:00 app[worker.1]:     at endReadableNT 
(internal/streams/readable.js:1334:12)
        2021-10-22T13:35:57.470713+00:00 app[worker.1]:     at processTicksAndRejections 

(internal/process/task_queues.js:82:21)

我的错误代码如下,日志显示,未定义排名列表(?),即使它可以在 http 响应中看到? 错误代码:

                case 'driverstandings':                 
                    request('http://ergast.com/api/f1/'+args[2]+'/driverStandings.json', (error, response, body) => 
                    if(error) msg.reply(error); 
                    const temp = JSON.parse(body);
                    let answer = 'Season: ' + temp.MRData.StandingsTable.StandingsList[0].round;
                    try 
                        for(var i = 0; i < temp.MRData.StandingsTable.StandingsList[0].DriverStandings.length; i++) 
                            answer += (i+1)+'. ' 
                                + temp.MRData.StandingsTable.StandingsList[0].DriverStandings[i].Driver.givenName +' '
                                + temp.MRData.StandingsTable.StandingsList[0].DriverStandings[i].Driver.familyName + ', ' 
                                + temp.MRData.StandingsTable.StandingsList[0].DriverStandings[i].points +' points, wins: '
                                + temp.MRData.StandingsTable.StandingsList[0].DriverStandings[i].wins +'\n';
                        
                    catch(error) 
                        console.log(error);
                        answer = 'No entries';
                       
                    msg.reply(answer);
                );
                break;

语法方面,我就是不知道我的错误。

JSON 的结构如下:json structure screenshot

json 的 API 是:JSON

【问题讨论】:

由拼写错误引起的问题很可能会被关闭,因为它们不太可能帮助未来的读者 【参考方案1】:

错别字 -> StandingList 而不是 StandingsList

【讨论】:

【参考方案2】:

我没有尝试过你的代码,它似乎应该是排名榜而不是排名榜。 可以试试吗?

溴 帕特里克

【讨论】:

是的,我也想通了。不过感谢您的意见! 欢迎您...经常发生在我身上...大多数空指针异常来自拼写错误或数组大小错误 :) 周末愉快 哈哈是的,我想应该是这样的,语法对我来说很好。刚刚离开了几个小时,是的 - 神奇地发现了错误;D你也喜欢它!:)

以上是关于TypeError:无法读取未定义的nodejs请求http的属性'0'的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的nodejs请求http的属性'0'

Nodejs Promise TypeError:无法读取未定义的属性'then'

TypeError:无法在nodejs中读取未定义的属性“email”

nodejs/mongoDB - 类型错误:无法读取未定义的属性“集合”

nodejs/mongoDB - 类型错误:无法读取未定义的属性“集合”

Node.js 和 jdbc:TypeError:无法读取未定义的属性“url”