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