Monday, 13 March 2017

NodeJS : Cannot execute shell script synchronously

I am trying to execute a shell command and return the output to the webpage

  app.post("/api/procText", function (request, response) {
      var input = request.body.inString;
      console.log(request.body)

      var exec = require('child_process').execSync;
      var cmd = 'scripts/myScript -s' + '\''+input+'\'';
      var script_output=''

exec(cmd, {env: {'resources': '/dasd/okok/data'}}, function(error, stdout, stderr) {
    console.log("Inside exec "+stdout)
    script_output=stdout
});

  console.log("Outside "+script_output);
  response.send("Sending "+script_output); 
    });

However, the script_output is always blank and also i do not see the inner message on the console

What am i doing wrong?

Also, here is the corresponding html

<body>
    <div class="container">
        <h1>Welcome.</h1>
        <div id="sampleInput" class="input-group-lg center-block helloInput">
            <p class="lead">Input Text?</p>
            <input id="sample_text" type="text" class="form-control"
                placeholder="inString" aria-describedby="sizing-addon1" value="" />
        </div>
        <p id="response" class="lead text-center"></p>


    </div>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script
        src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script
        src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    <script>
        //Submit data when enter key is pressed
        $('#sample_text').keydown(function(e) {
            var inString = $('#sample_text').val();
            if (e.which == 13 && inString.length > 0) { //catch Enter key
                //POST request to API to create a new visitor entry in the database
                $.ajax({
                    method : "POST",
                    url : "./api/procText",
                    contentType : "application/json",
                    data : JSON.stringify({
                        inString : inString
                    })
                }).done(function(data) {
                    alert(data);
                    $('#response').html(data);
                    $('#sampleInput').hide();

                });
            }
        });
    </script>
</body>



via AbtPst

No comments:

Post a Comment