Ich habe einen einfachen Node-Server, der eine Seite mit einer Schaltfläche bedient. Beim Klicken auf diese Schaltfläche muss ein Befehl auf einem Remote-Host ausgeführt werden. Wenn der Befehl beendet ist, sollte die Ausgabe an die Antwort der Funktion übergeben und in html angezeigt werden.Spawn-Prozess auf Remote-Host in NodeJS
Derzeit ist dies der Server-Code:
app.use(logger("combined"));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.get('/index.html', function (req, res) {
res.sendFile(__dirname + "/" + "index.html");
})
app.post('/connect', function (req, res) {
var spawn = require('cross-spawn-async');
var mpiProc = spawn('ssh','[email protected]','"ls"', { stdio: ['pipe','pipe',2,'pipe'] });
var grid = "...8.1..........435............7.8........1...2..3....6......75..34........2..6..";
str = "";
mpiProc.stdout.on('data', function(data) {
console.log(data);
str = data.toString();
res.write('data: ' + JSON.stringify({ msg : str }) + '\n\n');
// Output
});
mpiProc.on('close', function(code) {
res.end(str);
// Script exit code
});
mpiProc.on('error', function(code) {
res.end('stderr: ' + code);
// Script exit code
});
})
require('http').createServer(app).listen(3000, function(){
console.log('Listening on 3000');
});
Wie Sie die folgenden Aufruf sehen versucht, den ‚ls‘ Befehl auf einem entfernten Rechner auszuführen:
var mpiProc = spawn('ssh','[email protected]','"ls"', { stdio: ['pipe','pipe',2,'pipe'] });
Aber das tut nicht Wenn Sie alles vom Server direkt vom Terminal ausführen, gibt es die Liste des Verzeichnisinhalts zurück. Um zu testen, ob der Befehl auf diese Weise mit einem Spawn funktioniert Ich habe versucht dies zu tun:
var mpiProc = spawn('ls', { stdio: ['pipe','pipe',2,'pipe'] });
Welche gibt, was ich erwartet hatte, die Liste der Verzeichnisinhalte auf dem Server. Also wie kann ich eine Pipe zu einem Remote-Host erstellen, um einen Befehl auszuführen und dann das Ergebnis des Befehls auf dem Server zu speichern?