En esta sección, aprendamos sobre los métodos de NodeJ para implementar operaciones que no sean de bloqueo.
Primero modificemos el controlador de inicio:
La copia del código es la siguiente:
var exec = require ("child_process"). Exec;
función start () {
console.log (se llamó al controlador de solicitud 'Inicio'. ");
var content = "vacía";
exec ("ls -lah", function (error, stdout, stderr) {
contenido = stdout;
});
devolver contenido;
}
function upload () {
console.log ("Solicitar el controlador 'Subiendo' se llamó.");
devolver "hola subiendo";
}
exports.start = inicio;
exports.upload = cargar;
Este código crea un nuevo contenido variable (el valor inicial está "vacío"), ejecuta el comando "ls -lah", asigna el resultado al contenido y finalmente devuelve el contenido.
Hemos introducido un nuevo módulo Node.js, child_process, que se utiliza para implementar una operación simple y práctica sin bloqueo: Exec ().
Entonces, ¿qué hace Exec ()?
Ejecuta un comando shell desde node.js. En el ejemplo anterior, lo usamos para obtener todos los archivos en el directorio actual ("LS -LAH"), y luego generar la información del archivo al navegador cuando /Starturl solicita.
Comenzamos el servidor y visitamos "http: // localhost: 8888/inicio" y encontraremos que la salida de contenido en la página está vacía.
Exec () funciona, y con él podemos realizar operaciones de shell que requieren mucho tiempo sin obligar a nuestra aplicación a detenerse y esperar esa operación.
A pesar de esto, la salida de contenido de la página no parece ser el resultado que queremos.
Analicemos las razones:
Nuestro código se ejecuta sincrónicamente, lo que significa que después de llamar a Exec (), Node.js ejecutará el contenido de retorno de inmediato;
En este momento, el contenido todavía está "vacío", porque la función de devolución de llamada pasada a Exec () aún no se ha ejecutado, porque la operación de Exec () es asíncrona.
En la siguiente sección explicaremos cómo resolver este problema.