【问题标题】:How to send realtime file update from node js server (express) to angular js如何将实时文件更新从节点 js 服务器(快递)发送到角度 js
【发布时间】:2018-06-13 05:27:35
【问题描述】:

作为一个新手,我正在编写一个简单的应用程序,它将监视我服务器中的文本文件,并且每当文本文件发生任何更改时,我都必须将文件内容发送到客户端。

我正在使用node.jsangular

目前我正在考虑将 socket.io 与 express 一起使用,但不确定它是否正确。

需要帮助才能找到正确的方法。

我的示例服务器代码如下。

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var fs = require('fs');
var filePath = 'C:\\MyPrograms\\testfile.txt';
var file = fs.readFileSync(filePath);

app.use(express.static(__dirname + '/public'));

io.on('connection', function(socket) {
  console.log('new connection');
});


server.listen(4041, function() {
  console.log('server up and running at 4041 port');});

console.log('Initial File content : ' + file);

fs.watch(filePath, function(event, filename) {
  if(filename){
    file = fs.readFileSync(filePath);
    console.log('File content : ' + file);
    io.emit('filemodified', { message: 'Content Changed' });
    } else{
    console.log('filename not provided')
  }
});

还请建议我是否可以使用 nodemon 来代替 socket.io。

【问题讨论】:

  • 不太清楚你在问什么。如果您有特定问题(即“客户永远不会收到更改通知”或“第 X 行发生错误(带有详细信息)”),请指定。
  • 因为我是一个新手,所以只是想知道我是否按照我的要求走正确的路,或者这只是矫枉过正。此外,当我运行上面的脚本时,我的客户端永远不会收到通知,我只会在控制台上收到大量连续的新连接消息。

标签: javascript angularjs node.js socket.io


【解决方案1】:

如果我正确理解了您的问题,fs.watch(filePath, function(event, filename) {}); API 应该可以正常工作。

我想给你的唯一建议是了解 socket.ioweb-sockets 之间的区别。

Socket.io 提供了许多您可能不会在应用程序中使用的功能。

但是,使用 socket.io 的开销是您必须在客户端包含一个额外的脚本才能使其工作。

另一方面,web-socket 是一项核心功能,您不必包含任何外部依赖项即可使其工作。

显然 web-sockets 不像 socket.io 那样功能丰富,根据要求选择其中一个选项总是更好。

我希望这会有所帮助:)

【讨论】:

  • 我还有一个困惑。如果我使用 nodemon 监视我的文本文件以进行修改,它将在文本文件更新时自动重新启动我的脚本,然后通过 GET 发送文件内容。不知道这有什么缺点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2022-12-13
  • 2018-07-28
  • 2019-01-16
  • 1970-01-01
  • 2020-07-04
  • 2021-03-09
相关资源
最近更新 更多