将 Express.js 应用程序连接到 signalR 端点

问题描述 投票:0回答:1

我正在尝试将我的 Express 应用程序连接到端点,以便我可以获取一些数据。但我做得不对。此时,我们感谢任何帮助。 这是我试图从中获取数据的网站: [1]:https://ifb.ir/OptionStockQuote.aspx

这是我的express.js代码:

app.get("/faraboorsdata", async (req, res) => {
  const { data } = await axios({
    method: "get",
    url: "https://ifb.ir/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&_=1691911758544",
    httpsAgent: httpsAgent,
  });

  const evtsource = new EventSource(
    `https://www.ifb.ir/signalr/connect?transport=serverSentEvents&connectionToken=${data["ConnectionToken"]}&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&tid=7`
  );

  evtsource.onopen = async (event) => {
    console.log("Connection Opened!");
    const { data: postData } = await axios({
      method: "post",
      url: `https://ifb.ir/signalr/send?transport=serverSentEvents&connectionToken=${data["ConnectionToken"]}&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D`,
      data: {
        H: "myhub",
        M: "letsStartForOption",
        A: [`${data["ConnectionId"]}`],
        I: 0,
      }
    });
    console.log("POST request Sent!");
  };

  let counter = 0;
  let timeoutId = null;
  evtsource.onmessage = async (event) => {
    if (event.data !== "initialized") console.log(JSON.parse(event.data)["M"]);
    if (event.data !== "initialized" && JSON.parse(event.data)["M"]) {
      if (
        JSON.parse(event.data)["M"][0]["M"] === "updateInitialOptionTable" ||
        JSON.parse(event.data)["M"][0]["M"] === "updateRowForOptionStock"
      ) {
        counter += 1;
        evtsource.close();
        res.json(JSON.parse(event.data));
      }
    }
  };

  req.on("close", () => {
    evtsource.close();
  });
});

您可以检查我发送的网站以了解它本身如何获取数据。

javascript node.js asp.net express signalr
1个回答
0
投票

为什么使用事件源?尝试使用网络套接字协议来获取数据

 try {
    let options = {
      headers: {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3419.0 Safari/537.36"
      }
    };

    let client = new WebSocket(endpoint, options);

    client.onopen = () => {
      console.log("websocket open");
      client.send("42" + JSON.stringify(["getRooms", false]));
    };

    client.onmessage = (event) => {
      console.log("websocket message:", event.data);
    };

    client.onclose = (reason) => {
      console.log("websocket close:", reason.code);
    };

    client.onerror = (error) => {
      console.log("websocket error:", error.message);
    };
  } catch (error) {
    console.log("connect error:", error.message);
  }

© www.soinside.com 2019 - 2024. All rights reserved.