2017-07-02 15 views
1

J'ai créé un script dans NodeJS avec plusieurs conditions. Je souhaite exporter/imprimer le fichier console.log sur une page Web à l'aide de NodeJS Server.nodejs print console.log à http

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

Est-ce possible? J'ai cherché partout.

Merci beaucoup!

+0

Pourquoi voulez-vous imprimer les journaux de serveur vers une page Web côté client? –

+0

Parce que je veux les utiliser dans PRTG (outil de surveillance) – user3130478

+0

Essayez d'utiliser des sockets pour ce genre de choses. –

Répondre

1

Afin d'exporter/imprimer le résultat console.log(...) à la page Web, vous pouvez remplacer console.log et le faire émettre un message avant qu'il ne soit imprimé dans la console du serveur. Ensuite, le message sera émis au navigateur en utilisant Web Socket et imprimé/utilisé dans la page.

Exemple de code ci-dessous.

côté serveur:

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); 

côté navigateur:

<!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

Merci pour l'exemple! Lorsque j'utilise le script, j'obtiens l'erreur suivante: (node) warning: event possible fuite de mémoire EventEmitter détectée. 11 écouteurs de journalisation ajoutés. Utilisez emitter.setMaxListeners() pour augmenter la limite. – user3130478

+0

@ user3130478 Cela est dû au fait qu'un nouvel écouteur d'événement 'logging' est ajouté chaque fois qu'il y a une connexion io. J'ai modifié le code en réponse et ne laisse qu'un écouteur d'événement 'logging'. Veuillez noter que ceci fera un message de diffusion d'instruction 'console.log (...)' à tous les navigateurs clients. – shaochuancs