节点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