2017-07-02 75 views
1

我在具有多个条件的NodeJS中创建了一个脚本。 我想使用NodeJS服务器将console.log导出/打印到网页。nodejs将console.log打印到http

function myfunction() { 
    app('Some text', 'ALERT!', function(err, remaining) { 
     if (err) throw err; 
     console.log('Some text.'); 

这可能吗?我到处搜索。

非常感谢!

+0

你为什么要打印从服务器日志在客户端的网页? –

+0

因为我想在PRTG(监视工具)中使用它们 – user3130478

+0

请尝试使用套接字来处理这些事情。 –

回答

1

为了导出/打印console.log(...)结果到网页,您可以覆盖console.log并使其在服务器控制台中打印之前发出消息。然后消息将使用Web Socket发送到浏览器并在页面中打印/使用。

示例代码如下。

服务器端:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var port = process.env.PORT || 3000; 

var events = require('events'); 
var eventEmitter = new events.EventEmitter(); 

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

eventEmitter.on('logging', function(message) { 
    io.emit('log_message', message); 
}); 

http.listen(port, function(){ 
    console.log('listening on *:' + port); 
}); 

// Override console.log 
var originConsoleLog = console.log; 
console.log = function(data) { 
    eventEmitter.emit('logging', data); 
    originConsoleLog(data); 
}; 

// code for test. 
setInterval(function() { 
    console.log('X: ' + Math.random()); 
}, 2000); 

浏览器端:

<!doctype html> 
<html> 
    <head> 
    <title>Example</title> 
    </head> 
    <body> 
    <ul id="messages"></ul> 
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script> 
    <script> 
     $(function() { 
     var socket = io(); 
     socket.on('log_message', function(msg){ 
      $('#messages').append($('<li>').text(msg)); 
     }); 
     }); 
    </script> 
    </body> 
</html> 
+0

感谢您的示例!当我使用脚本时,我会得到以下错误:(节点)警告:检测到可能的EventEmitter内存泄漏。添加了11个日志监听器。使用emitter.setMaxListeners()来增加限制。 – user3130478

+0

@ user3130478这是因为每次有一个io连接时都会添加一个新的'logging'事件侦听器。我在回答中编辑了代码,只留下一个'logging'事件监听器。请注意,这将使'console.log(...)'语句广播消息到所有客户端浏览器。 – shaochuancs

相关问题