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, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
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?
The read end of one pipe serves as standard input for the child process, and the write end of the other pipe is the standard output for the child process.
The node:child_process module provides the ability to spawn subprocesses in a manner that is similar, but not identical, to popen(3) . This capability is primarily provided by the child_process. spawn() function: const { spawn } = require('node:child_process'); const ls = spawn('ls', ['-lh', '/usr']); ls. stdout.
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.:
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
var child_process = nw.require('child_process');
var spawn = child_process
//The following is on windows and I record stdout and stderr to my logger
var proc = spawn('cmd.exe', ['/S', '/C', script_path]);
proc.stdout.on('data', function(data) {
logger(logtag, 'proc_stdout: ' + data);
});
proc.stderr.on('data', function(data) {
logger(logtag, 'proc_stderr: ' + data);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With