Exécuter Script Bash avec Nœud de demande de client

J'ai besoin de faire un script côté serveur exécute lorsqu'un utilisateur à partir du navigateur clique sur un bouton...

J'ai fait des recherches pendant un certain temps, et ne peut pas le comprendre.

Ce que nous avons:

  • Node.js serveur (localhost) en cours d'exécution sur Fedora Red Hat
  • PAS DE PHP
  • La plupart des pages sont en html + javascript + jQuery

Pour être plus clair, voici ce que nous aimerions arriver:

-->Utilisateur va sur http://localhost /index.html

-->l'Utilisateur sélectionne les couleurs, pousse le bouton "soumettre".

-->les couleurs Sélectionnées aller à l'script bash (sur le serveur) ./sendColors [listOfColors]

-->Le script bash-t-il son chose.

================

Choses que j'ai essayé de

child_process.frayer

Je SOUHAITE que je pourrais le faire sur la page html:

var spawn = require('child_process').spawn;
ls    = spawn(commandLine, [listOfColors]);

ls.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);
});

mais ce script côté serveur, pas côté client, donc je ne peux pas l'exécuter sur la page html (je crois). L'erreur que j'obtiens quand j'essaie de le lancer c'est que le besoin n'est pas défini.

browserify

J'ai essayé installinst browserify, mais la machine que nous utilisons n'est pas connecté à internet, et ne peut pas utiliser npm install. J'ai copié manuellement les fichiers de/usr /lib et "nécessaire", mais ensuite il a dit qu'il ne trouve pas de besoin de "travers", qui est en browserify de l'index.js...

getRuntime

essayé cette chose:

        var bash_exit_code = 0;          //global to provide exit code from bash shell invocation

        function bash(command)
        {
          var c;           //a character of the shell's stdout stream
          var retval = "";          //the return value is the stdout of the shell

          var rt = Runtime.getRuntime();        //get current runTime object
          var shell = rt.exec("bash -c '" + command + "'");   //start the shell
          var shellIn = shell.getInputStream();        //this captures the output from the command

          while ((c = shellIn.read()) != -1)        //loop to capture shell's stdout
            {
              retval += String.fromCharCode(c);        //one character at a time
            }

          bash_exit_code = shell.waitFor();        //wait for the shell to finish and get the return code

          shellIn.close();          //close the shell's output stream

          return retval;
        }

a dit qu'il ne savait pas ce que l'Exécution a été

RequireJS

J'ai regardé dans RequireJS, mais ne savait pas comment l'utiliser dans mon cas

eval

J'ai essayé eval aussi... mais je pense que c'est pour le corps expressions... ne fonctionne pas.

ActiveX

même essayé activeX:

variable=new ActiveXObject(...

a dit qu'il ne savait pas ce ActiveXObject est

================

Actuellement ce que je suis en train de

HttpServer.js:

var http = require('http');
...
var colors = require('./colorsRequest.js').Request;
...

http.get('http://localhost/colorsRequest', function(req, res){
    //run your request.js script
    //when index.html makes the ajax call to www.yoursite.com/request, this runs
    //you can also require your request.js as a module (above) and call on that:
    res.send(colors.getList()); //try res.json() if getList() returns an object or array
    console.log("Got response ");//+ res.statusCode);
    });

colorsRequest.js

var RequestClass = function() {
    console.log("HELLO");
}; 

//now expose with module.exports:
exports.Request = RequestClass;

index.html

...
var colorsList = ...
...
$.get('http://localhost/colorsRequest', function(colors) {
            $('#response').html(colorsList); //show the list
    });

Je suis

GET http://localhost/colorsRequest 404 (Not Found)

Quelqu'un a des idées?

Vous ne serez pas en mesure d'exécuter un script dans le navigateur (pensez aux implications en matière de sécurité, si cela était possible), de sorte que vous allez avoir à relayer l'événement sur votre serveur et d'exécuter le script.
Pourquoi êtes-vous essayer de l'exécuter sur le côté client? Faites votre script côté client envoie une requête au serveur de Nœud, puis le faire côté serveur. De retour de vos résultats.
Oh, ok! Je suis en train de faire un essai

OriginalL'auteur Katie S | 2013-05-16