Express:渲染数组并在数组更改时更新

Express : render array and update when array change

我这里有个小问题,我有一个数组,每 30 秒自动更改一次,我想将这个数组渲染到我的 ejs 文件,并在数组更改时更新数据 这是代码:

const request = require("request");
const cheerio = require("cheerio");
const express = require("express");
const cors = require("cors");

const app = express();
app.use(express.json()); // req.body
app.use(cors());
app.set("view engine", "ejs");

app.get("/", (req, res) => {
  let titles = [];

  setInterval(() => {
    request("SOMEWEBSITE",(error, response, html) => {
        const $ = cheerio.load(html);

        $(".aditem").each((i, el) => {
          let title = $(el).find(".class").text();

          titles.push(title);
        });
      }
    );
  }, 5000);
  res.render("index", { titles });
});

app.listen(3000, () => {
  console.log("3000");
});

当我记录标题时,它正在改变但它没有呈现到我的 ejs 文件

您只能向传入请求发送一个 http 响应,因此每个 http 请求只能调用一次 res.render()。

可能的解决方案是:

  1. 投票中。网页中有 Javascript 通过 Ajax 调用时不时地向您的服务器请求更新的数据。
  2. 让您的页面执行自动页面刷新,使其每隔一段时间自动重新加载,从而显示页面的新版本。
  3. 从网页到服务器建立一个 webSocket 或 socket.io 连接,这样服务器就可以通过 webSocket 或 socket.io 连接向网页发送新数据。然后网页中的 Javascript 将接收该数据并将其插入当前页面。