简体   繁体   中英

issue child process inside a server on node.js

I have an executable library in C (sudo ./ads1256_test adc.txt) where data are acquired from an ADC, likewise these data are automatically save in a text file (adc.txt).

On the other hand, I have a server in node.js (see code) in which would like to execute this program when a button in the website is pressed. For this, I tried to implement this process using the child process .exec('sudo ./ads1256_test adc.txt') but it did not work. It apparently runs but the values saved in the file are always zero. That is totally different to the obtained result when I execute the same command in terminal. I would appreciate if anybody could help me.

//Importing the core modules
var express = require('express');
var path = require('path');
var sys = require('sys');
var fs = require('fs');
var util = require('util');
var sleep = require('sleep');

var app = express();
var exec = require('child_process').exec;
var spawn = require('child_process').spawn;

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

//Static Directories
app.use(express.static(__dirname + '/public'));

app.post('/test', function (req, res) {
    exec('sudo ./ads1256_test adc.txt');
});     

//Server Starting
var server = app.listen(8080, function(err){
    if(err){
        console.log('Error starting http server');
    } else{
    console.log('Sever running at http://localhost:8080 ');
    }
});

first thing first, fix your code to - asynchronously handle the cp spawn - show errors

Example with tree, may you adapt it to your binary and check the response, it should help you go forward.

app.post('/test', function (req, res) {
  var cp = spawn('tree', []);
  cp.stdout.pipe(res);
  cp.stderr.pipe(res);
  cp.on('close', function () {
        res.end();
        cp.stdout.unpipe();
        cp.stderr.unpipe();
  });
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM