如何使此代码在现代的nodejs中运行?

时间:2019-11-10 07:21:02

标签: javascript node.js linux logging websocket

我正在尝试实现一个简单的Web界面,从中可以看到日志文件的tail -f。

找到了以下链接

https://thoughtbot.com/blog/real-time-online-activity-monitor-example-with-node-js-and-websocket

它似乎很旧,与现代node.j不兼容。

我试图浏览node.j的文档,但无法解决。 创建子进程会引起一些问题。

var filename = process.argv[2];

if (!filename)
  return sys.puts("Usage: node watcher.js filename");

var tail = process.createChildProcess("tail", ["-f", filename]);
console.log("start tailing");

tail.addListener("output", function (data) {
  console(data);
});


var http = require("http");
http.createServer(function(req,res){
  res.sendHeader(200,{"Content-Type": "text/plain"});
  tail.addListener("output", function (data) {
    res.sendBody(data);
  });
}).listen(8000);

我想将此tailf'd日志发送到另一台服务器,该服务器将运行nodejs应用程序以读取此信息。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我已经搜索了整个nodejs文档,但是没有找到process.createChildProcess()的任何版本。

但是,您可以使用child-process内置模块替换它:

const filename = process.argv[2];

if (!filename){
  console.log("Usage: node watcher.js filename");
  process.exit(0)
}

const child = require('child-process')

const tail = child.exec("tail", ["-f", filename],{shell:true});
console.log("start tailing");

tail.stdout.on("data", function (data) {
  console.log(data);
});


const http = require("http");
http.createServer(function(req,res){
  res.writeHead(200,{"Content-Type": "text/plain"});
  tail.stdout.on("data", function (data) {
    res.write(data);
  });
}).listen(8000);