如何在Node.js中禁用或更新特定路由页面的响应内容
问题原因
你当前的实现逻辑不符合Express的路由规则:相同路径的路由会优先匹配第一个注册的处理函数,后续重复注册app.get("/test2/")的代码不会生效,所以接口返回的x值永远是第一次POST提交的内容,不会更新。
服务端修正方案(无需数据库)
不要动态注册路由,改用全局变量存储需要同步的内容,/test2路由仅注册一次,每次请求返回当前存储的最新值即可:
// 全局变量存储共享数据,服务重启后数据会清空,符合无需数据库的需求 let sharedContent = { variable: "" }; // 仅注册一次/test2路由,固定返回当前的共享数据 app.get("/test2/", function(req, res) { res.json(sharedContent); }); app.post('/Send', function(req, res){ console.log(req.body.signed); // 收到POST请求直接更新全局变量即可完成数据同步 sharedContent.variable = req.body.signed; // 给POST请求返回响应,避免前端请求超时 res.send({status: "ok"}); });
前端无刷新更新实现
要实现另一个HTML页面无需重载即可获取最新内容,可选两种方案:
- 短轮询方案(实现最简单):前端页面固定间隔请求
/test2接口,拿到新数据后更新页面DOM即可,前端示例代码:
// 页面展示内容的DOM节点,比如<div id="content-box"></div> const contentBox = document.getElementById("content-box"); function updateContent() { fetch("/test2") .then(res => res.json()) .then(data => { contentBox.textContent = data.variable; }) } // 页面加载时先拉取一次数据 updateContent(); // 每2秒拉取一次最新数据,可根据需求调整间隔时间 setInterval(updateContent, 2000);
- WebSocket方案(实时性更高):如果需要毫秒级的更新延迟,可以接入WebSocket,服务端收到POST请求后直接把新内容推送给所有连接的客户端,不需要前端定时轮询。
内容的提问来源于stack exchange,提问作者Turtle corporation
相关产品推荐
相关产品推荐

