我这里有一个小问题,我有一个数组,每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((一次。
可能的解决方案有:
- 轮询。让网页中的Javascript每隔一段时间通过Ajax调用向服务器请求更新的数据
- 让你的页面自动刷新页面,使其每隔一段时间自动重新加载,从而显示页面的新版本
- 建立从网页到服务器的webSocket或socket.io连接,这样服务器就可以在通过webSocket和socket.io的连接可用时向网页发送新数据。然后,网页中的Javascript将接收该数据,并可以将其插入当前页面