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

时间:2018-03-12 15:45:59

标签: javascript json node.js

我的应用程序是一个Web界面,用于监控"对象"由个人电脑处理,特别是当他们超过特定的门槛时。

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

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

对于服务器,我使用了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');
});

抛开页面estetics(css,images,layouts)服务器的核心, 服务GET和POST请求在routes.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作为触发事件(在阅读评论后编辑)。

1 个答案:

答案 0 :(得分:1)

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

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