编写获取RageMP服务器信息的JS程序无报错仅输出空行是什么原因?
问题排查结果
核心原因
你定义的async匿名箭头函数仅完成了声明,没有被主动调用执行,函数内部的所有逻辑都不会运行,所以除了开头的console.log('test')会输出外,没有其他日志也不会触发报错。
其他潜在问题
- 如果是在Node.js v18以下版本运行,原生环境没有内置
fetch方法,函数执行后会抛出fetch is not defined错误,需要提前安装node-fetch依赖并引入 - 要确认CDN返回的数据集里确实存在
164.132.226.166:22005对应的键,否则取值时会出现Cannot read properties of undefined报错
修复方案
把声明的async函数改成立即执行函数表达式(IIFE)即可,同时可以增加服务器数据存在性判断避免异常,修改后的代码如下:
const config = require("./conf.json"); console.log('test') // 末尾加()表示立即执行该函数 (async() => { const IP = "164.132.226.166"; console.log('IP definiert'); const PORT = "22005"; console.log('Port definiert'); try { let req = await fetch("https://cdn.rage.mp/master/", { method: "GET", }); console.log('Macht da was mit der CDN'); let data = await req.json(); let serverData = data[`${IP}:${PORT}`]; if (!serverData) { console.log('未查询到对应服务器数据'); return } let name = serverData.name; let gamemode = serverData.gamemode; let website = serverData.url; let currentPlayers = serverData.players; let peakPlayers = serverData.peak; let maxPlayers = serverData.maxplayers; console.log('Alles definiert'); console.log(name, gamemode, website, currentPlayers, peakPlayers, maxPlayers); } catch(e) { console.error(e); } })()
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

