Si desea permitir que las personas compilen código / ejecuten comandos a través de una interfaz web (algo así como compilar y ejecutar programas en línea | IDE en línea), querrá pasar el código para que se compile como un parámetro POST o en la URL (& code = Bla, bla, pero cuidado, esto tiene limitaciones de tamaño).
Entonces querrá invocar el compilador relevante desde Node.js
var spawn = require (‘child_process’). spawn;
var prc = spawn (‘javac’, [‘filenameIJustMade’]);
- ¿Cómo se habilita la marca de tiempo en ciertas aplicaciones web como Whatsapp, Facebook? etc. ¿Cómo funciona?
- ¿Es correcto que una aplicación web sea un software que nos permite acceder a un sitio web?
- ¿Qué lenguajes de programación se usan para las aplicaciones web?
- ¿Cuáles son los beneficios de usar Angular (2) o ReactJs en aplicaciones web empresariales?
- ¿Hay algún tutorial en la web donde se le enseñe a crear una aplicación web completa de Node.js desde cero?
Finalmente, querrá invocar el programa que acaba de compilar y responder a la solicitud HTTP con la salida del programa.
Algo como
var spawn = require (‘child_process’). spawn;
var prc = spawn (‘java’, [‘programIJustCompiled]);
prc.stdout.setEncoding (‘utf8’);
prc.stdout.on (‘datos’, función (datos) {
var str = data.toString () var lines = str.split (/ (\ r? \ n) / g);
// Escribe líneas en tu socket
});
(Desde ¿Es posible ejecutar un programa externo desde node.js?)
Los posibles problemas con esto son que no hay nada que impida que alguien envíe códigos maliciosos o códigos que tardan años en ejecutarse.
Si solo está tratando de compilar el código y devolver un exe al usuario, entonces sería bastante fácil con Java (Invocar javac, generar un jar, Devolver jar como descarga) pero más problemático con GCC o G ++ ya que el servidor probablemente se ejecutará en un sistema operativo diferente para el usuario, por lo que su ejecutable generado probablemente no será compatible con su computadora (para resolver esto, necesitaría intentar discernir la plataforma del usuario y compilar específicamente para ello, pero esto sería un desafío).