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?
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
Vous devez vous connecter pour publier un commentaire.
Ici est un simple passe-partout pour le serveur (qui utilise Express, de sorte que vous devrez peut-être installer que le premier:
npm install express
):Vous pouvez passer d'une couleur, et il sera exécuté le shellscript
run.sh
(dont elle suppose, est situé dans le même répertoire que le serveur de fichier JS) avec la couleur passée en argument:Voici un standard HTML de la page (enregistrer en tant que
index.html
, le mettre dans le même répertoire que le code du serveur et le script shell, démarrer le serveur, et d'ouvrirhttp://localhost:3000
dans votre navigateur):comment pourrais-je obtenir ce pour fonctionner sur windows avec cygwin?
Je n'ai aucune idée, désolé 🙁
OriginalL'auteur robertklep
Vous êtes sur la bonne voie avec votre première approche, la
child_process.spawn
variante. Bien sûr, vous ne pouvez pas mettre cela dans la page HTML, comme il est alors exécuté dans le navigateur, pas dans le serveur, mais vous pouvez facilement créer une demande dans le navigateur (AJAX ou de chargement de la page, en fonction de ce que vous avez besoin), qui déclenche l'exécution de ce script sur le serveur.Cela semble être une partie de celui-ci: w3schools.com/ajax/ajax_xmlhttprequest_create.asp
OriginalL'auteur Eugen Rieck