繁体   English   中英

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

[英]Node Js server refreshing page when receiving a JSON update

我的应用程序是一个Web界面,用于监视由PC处理的“对象”的变化,尤其是当它们超过特定阈值时。

Node Js服务器在同一台PC上运行,并且只能在表上显示数据,并在其中一个达到给定阈值时刷新数据。 那时,计算“对象”的程序将打开一个到Node Js服务器的套接字,并发送json数据。

我的问题是在用户浏览器上重新加载页面以显示新的内容,而无需用户手动单击浏览器刷新按钮。

对于服务器,我使用了express,express-ejs-layouts和body-parser模块。

这是我的服务器代码:

// 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请求提供服务的是route.js文件,该文件在GET请求上呈现将JSON数据传递到包含该表的javascript页面的页面。 POST请求保存我的“对象”计算器传递的JSON。

这是routes.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更新内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM