Nesta seção, vamos aprender sobre os métodos do NodeJS para implementar operações não bloqueadoras.
Vamos primeiro modificar o manipulador de partida:
A cópia do código é a seguinte:
var Exec = requer ("Child_Process"). Exec;
função start () {
console.log ("Solicitação Handler 'Start' foi chamado.");
var content = "vazio";
exec ("ls -lah", função (erro, stdout, stderr) {
content = stdout;
});
retornar conteúdo;
}
função upload () {
console.log ("O manipulador de solicitação 'upload' foi chamado.");
retornar "Hello upload";
}
exports.start = start;
exports.upload = upload;
Este código cria um novo conteúdo variável (o valor inicial é "vazio"), executa o comando "ls -lah", atribui o resultado ao conteúdo e finalmente retorna o conteúdo.
Introduzimos um novo módulo Node.js, Child_Process, que é usado para implementar uma operação simples e prática sem bloqueio: EXEC ().
Então, o que o EXEC () faz?
Ele executa um comando Shell do Node.JS. No exemplo acima, usamos -o para obter todos os arquivos no diretório atual ("ls -lah") e, em seguida, produzimos as informações do arquivo para o navegador quando /Starturl solicitações.
Iniciamos o servidor e visitamos "http: // localhost: 8888/start" e descobriremos que a saída de conteúdo na página está vazia.
Exec () funciona e, com ele, podemos executar operações de shell muito demoradas sem forçar nosso aplicativo a parar e aguardar essa operação.
Apesar disso, a saída de conteúdo da página não parece ser o resultado que queremos.
Vamos analisar os motivos:
Nosso código é executado de maneira síncrona, o que significa que, após a chamada de Exec (), o Node.js executará o conteúdo de retorno imediatamente;
No momento, o conteúdo ainda está "vazio", porque a função de retorno de chamada passada para Exec () ainda não foi executada - porque a operação do EXEC () é assíncrona.
Na próxima seção, explicaremos como resolver esse problema.