0

我刚刚在 Node.js 上启动并运行了我的第一个应用程序。到目前为止,它只是提供一个静态文件。但我有一些想法将在未来实施,所以我将继续进行 Node 设置,以便到那时我会做好准备。

// get modules
var express = require('express');
var fs = require('fs');

// create app instance
var app = express();

// static files middleware
app.use("/assets", express.static(__dirname + '/assets'));

// main route
app.get('/', function(req, res) {
    var html = fs.readFileSync('assets/views/main.html', 'utf8');
    res.send(html);
});

// make web server listen on specific port
app.listen(8080);

注意:我意识到我不需要 Express 来提供一条路线,但我想在这方面抢占先机有什么害处?!:)

我的第一个想法是想办法让所有当前使用该应用程序的用户知道已经有更新并且他们必须刷新他们的浏览器。无需保存应用程序的当前状态,因为它非常基本。

因此,如果我是用户,我正在使用该应用程序和繁荣,我会收到一个非常小的模态窗口警报通知,让我知道我需要刷新。

此外,如果某些用户在我发送警报之后加载应用程序,则该用户根本不应该看到警报(因为他们应该已经看到了新的更改)。

我已经对该主题进行了一些谷歌搜索,但我对找到的示例不满意。我不认为我想更新一个notifications.xml 文件(node.js 将被监视)来推送一个新的通知。

我能想到的一种解决方案是创建一个可以从命令行执行的命令,该命令将(以某种方式)向应用程序发送新通知。也许使用像 Grunt.js 这样的东西(我不确定它是否适合这个,因为我从未使用过它)。基本上,一旦发送通知,它的所有痕迹都应该消失。这就是为什么我认为命令行方法会很好。

这是我的问题:(一般来说)我应该如何实现这样的东西?我是 Node.js 新手,但我对 javascript 和命令行非常熟悉。

请随时提供您认为对我更好的任何替代解决方案(命令行方法除外),或您认为可以帮助我的任何工具。

谢谢!

4

1 回答 1

1

如果您想将更新推送到 Web 客户端,一种方法是使用Socket.io 之类的东西。这会在客户端和服务器之间创建一个双向管道,您可以使用它来异步推送更新。

示例服务器:

var app = require('express').createServer()
  , io = require('socket.io').listen(app);

app.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

示例客户端:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    alert('New news has come in! Please refresh your page!');
    socket.emit('my other event', { my: 'data' });
  });
</script>

另一种选择是使用 Javascript 从客户端轮询以主动查找更新。您需要在服务器上为每个客户端保留一些状态,以确定该客户端是否需要更新。然后,客户端将在某个计时器间隔(例如,每秒一次)向辅助路由发出 get 请求,服务器将回复“是的,您需要更新”或“不,您不需要更新” . 如果是,则客户端 Javascript 会弹出您的模式框并告诉用户刷新。

于 2012-09-18T23:05:59.340 回答