接收 JSON 更新时的节点 Js 服务器刷新页面



我的应用程序是一个Web界面,用于监视PC处理的"对象"上的更改,特别是当它们超过特定阈值时。

Node Js 服务器在同一台 PC 上运行,并且仅用于在表上显示数据,当其中一个达到给定阈值时刷新它。 此时,计算"对象"的程序会打开一个套接字到 Node Js 服务器并发送 json 数据。

我的问题是在用户浏览器上重新加载页面以播放新的 resoults,而无需用户手动点击浏览器刷新按钮。

对于服务器,我使用了快速,快速ejs布局和正文解析器模块。

这是我的服务器代码:

// require our dependencies
var express        = require('express');
var expressLayouts = require('express-ejs-layouts');
var bodyParser     = require('body-parser');
var app            = express();
var port           = 3000;
// use ejs and express layouts
app.set('view engine', 'ejs');
app.use(expressLayouts);
// use body parser
app.use(bodyParser.json({extended : true}));
// route our app
var router = require('./app/routes');
app.use('/', router);

// set static files (css and images, etc) location
app.use(express.static(__dirname + '/public'));
// start the server
app.listen(port, function() {
console.log('app started');
});

撇开页面美学(css,图像,布局)服务器的核心, 服务 GET 和 POST 请求位于路由.js文件上,在 GET 请求上呈现将 JSON 数据传递到包含表的 javascript 页面的页面,在 POST 请求上保存我的"对象"计算器传递的 JSON。

这是路由.js代码:

// require express
var express = require('express');
var path    = require('path');
// create our router object
var router = express.Router();
// export our router
module.exports = router;
router.post("/", function(request, response) {
global.exportage = request.body;
});
// route for our homepage
router.get('/displayobj', function(req, res) {
//res.send(global.exportage);
res.render('pages/displayobj',{data:global.exportage});
});

你怎么看我正在使用一个非常可怕的全局变量来传递数据,但我想让它尽可能简单。

收到新的 JSON 时,如何强制在用户浏览器上重新加载?

我尝试使用location.reload(true),但在执行过程中出现错误,说:"未定义位置"。

在我看来,问题是服务器满足浏览器发出的GET请求,并且没有其他任何事情发生,因为通信已经完成。我不想以固定的时间间隔刷新页面,而是使用新的 JSON 作为触发事件(在阅读评论后编辑)。

您无法使用简单的 HTTP 请求从服务器到客户端进行实时通信。考虑使用长轮询或 websocket。

最简单的解决方案是使用像 Socket.io 这样的库来处理它。当内容需要刷新时,将事件发送到客户端,然后使用window.location.reload()刷新或使用 DOM API 更新内容。

最新更新