如何解决节点js从正文中获取数据
嗨,我刚刚开始学习node.js和javascript。而且我正在尝试使用node-fetch从url中获取数据,然后尝试对数据进行json解析,但是我一直得到未定义的返回值。
我正在尝试从下面的html中从可变游戏中获取数据,然后进行字符串化处理,然后解析json,但是它返回未定义的内容。
我希望也许有人可以帮助我找出原因?
我尝试从不受控制的站点获取数据不是html代码。
页面html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document Title</title>
</head>
<body>
<div id="hud-div">
<p>Welcome to the blah blah blah blah text here</p>
</div>
<script>
var game = new Game({
stage: "prod",servers: {
v32306117: {
id: "v32306117",region: "region 1",name: "region #1",hostname: "hostname1",port: 80,fallbackPort: 8000,population: 97,selected: false
},v32306125: {
id: "v32306125",region: "region 2",name: "region #2",hostname: "hostname2",population: 38,selected: false
}
},userGroup: 0
});
game.init(function() {
game.assetManager.load([{
"name": "\/asset\/image\/map\/grass.png","url": "\/asset\/image\/map\/grass.png"
}]);
game.debug.init();
game.run();
});
</script>
</body>
</html>
获取功能:
const fetch = require("node-fetch");
async function serversFetch() {
try {
const servers = await fetch("https://get-servers.herokuapp.com/");
const data = await servers.text();
const servers_data = data.substring(
data.lastIndexOf("var game =") + 20,data.lastIndexOf("game.init") - 10
);
return JSON.stringify(servers_data);
} catch (error) {
console.log(error);
}
}
(async () => {
const data = await serversFetch();
console.log('data',data);
const info = JSON.parse(data);
console.log('info',info.servers); // returns undefined
})()
如果我在不使用info
的情况下管理日志servers
,则会收到如下所示的响应,但是当我尝试对日志info.servers
进行控制台操作时,它将返回未定义的状态。
info {
stage: "prod",userGroup: 0
}
我已经使用herokuapp创建了一个示例站点,供任何需要帮助的人使用。
解决方法
我建议不要混合使用async/await
和.then
。这是一种用于等待获取数据的方法。
const servers = await fetch("https://get-servers.herokuapp.com/");
const data = await servers.text();
// Work with data logic
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。