AberZombie AberZombie - 1 year ago 95
Node.js Question

Display running child process' output in nodejs (windows)

For example sake, I'm running the most basic webServer in node (I'm using windows) with the following code (named server.js):

var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '');
console.log('Server running at');

I would like to run this as a child process, and am successfully doing so with the following:

var exec = require('child_process').exec;
var serv = exec('node server.js', function(error, stdout, stderr){
console.log('outputs & errors:' + error, stdout, stderr);

However, I receive nothing once I run the second file. No "outputs & errors", no "Server running at...". If I type localhost:1337 in a browser, I get "hello world" though, so I know it's running. Is there a way to pipe that "server running..." so I can be "sure" it's listening?

Answer Source

Exec will return STDOUT and STDERR when the child finishes, see exec. That's why you do not see any output, when the server starts.

What you want is fork, which automatically connects the child process STDOUT and STDERR to your parent's. This is the preferred way if your child process is a node process.

If you want to use exec you can use the child processe's streams to get your data, e.g.:

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download