Como sair no Node.js

Qual é o comando usado para sair? (ou seja, terminar o processo do Node.js)

Chame o método de exit do object de process global:

 process.exit() 

Dos docs:

process.exit ([code])

Termina o processo com o code especificado. Se omitido, exit usa o código de ‘sucesso’ 0 .

Para sair com um código de ‘falha’:

 process.exit(1); 

O shell que executou o nó deve ver o código de saída como 1.

A partir da documentação oficial do nodejs.org :

 process.exit(code) 

Termina o processo com o código especificado. Se omitido, exit usa o código de ‘sucesso’ 0.

Para sair com um código de ‘falha’:

 process.exit(1); 

Se você está em um terminal Unix ou na linha de comando do Windows e deseja sair do Node REPL, também …

  • Pressione Ctrl + C duas vezes ou
  • digite .exit e pressione Enter, ou
  • pressione Ctrl + D no início de uma linha (somente Unix)

Apenas uma nota que usando process.exit([number]) não é prática recomendada .

A razão pela qual isso é problemático é porque as gravações em process.stdout em Node.js não são de bloqueio e podem ocorrer em vários ticks do loop de events Node.js. Chamar process.exit (), no entanto, força o processo a sair antes que as gravações adicionais em stdout possam ser executadas.

Em vez de chamar process.exit () diretamente, o código deve definir o process.exitCode e permitir que o processo saia naturalmente evitando o planejamento de qualquer trabalho adicional para o loop de events:

Se você puder, você deve definir o código de saída e permitir que o Node saia normalmente:

 process.exitCode = 1; 

Na linha de comando, .exit é o que você deseja:

 $ node > .exit $ 

Está documentado nos documentos REPL . REPL (Read-Eval-Print-Loop) é o que a linha de comando do nó é chamada.

De um programa normal, use process.exit([code]) .

Depende do motivo pelo qual você está disposto a sair do processo node.js, mas, em qualquer caso, process.exit() é a última opção a ser considerada . Uma citação da documentação:

É importante observar que chamar process.exit() forçará o processo a sair o mais rápido possível, mesmo se ainda houver operações assíncronas pendentes que ainda não foram totalmente concluídas, incluindo operações de E / S para process.stdout e process.stderr .

Na maioria das situações, não é realmente necessário chamar process.exit() explicitamente. O processo Node.js sairá por conta própria se não houver trabalho adicional pendente no loop de events. A propriedade process.exitCode pode ser definida para informar ao processo qual código de saída usar quando o processo sair normalmente.

Vamos cobrir possíveis razões pelas quais você pode estar disposto a sair do processo node.js e por que você deve evitar process.exit() :

Caso 1 – Execução completa (script de linha de comando)

Se o script chegou ao fim e o intérprete de nó não sai, isso indica que algumas operações assíncronas ainda estão pendentes. Está errado forçar a finalização do processo com process.exit() neste momento. É melhor tentar entender o que está impedindo o seu script de sair da maneira esperada . E quando você resolver isso, você pode usar process.exitCode para retornar qualquer resultado para o processo de chamada.

Caso 2 – Rescisão por causa de sinal externo (SIGINT / SIGTERM / other)

Por exemplo, se você estiver disposto a desativar um aplicativo expresso com facilidade. Ao contrário do script de linha de comando, o aplicativo expresso continua funcionando infinitamente, aguardando novas solicitações. process.exit() será uma opção ruim aqui porque vai interromper todos os pedidos que estão no pipeline. E alguns deles podem não ser idempotentes (UPDATE, DELETE). O cliente nunca saberá se essas solicitações estão concluídas ou não no lado do servidor e pode ser o motivo da inconsistência de dados entre o cliente e o servidor. A única boa solução é dizer ao servidor http para parar de aceitar novos pedidos e esperar que os pendentes terminem com server.close() :

 var express = require('express'); var app = express(); var server = app.listen(80); process.on( 'SIGTERM', function () { server.close(function () { console.log("Finished all requests"); }); }); 

Se ainda não sair, veja o caso 1.

Caso 3 – erro interno

É sempre melhor throw um erro, você obterá uma mensagem de erro e rastreamento de pilha bem formatado. Os níveis superiores de código sempre podem decidir se podem manipular erros ( catch ) ou deixar que o processo seja interrompido. Por outro lado, process.exit(1) terminará o processo silenciosamente e não haverá chance de se recuperar disso. Pode ser o único “benefício” de process.exit() , você pode ter certeza de que o processo será finalizado.

REPL (linha de comando)

  • Pressione ctrl + c duas vezes

  • Digite .exit e pressione enter

Arquivo de script

 process.exit(code) 

O nó normalmente sai com o código 0 quando não há mais operações assíncronas pendentes.

process.exit(1) deve ser usado para sair com um código de falha. Isso nos permitirá inferir que o nó não fechou graciosamente e foi forçado a fechar.

Existem outros códigos de saída como

3 – Erro interno de análise do JavaScript (muito, muito raro)

5 – Erro fatal no mecanismo de javascript v8

9 – Argumento inválido

Para lista completa, consulte os códigos de saída do nó

Eu tenho um aplicativo que eu queria:

  1. Envie um email para o usuário
  2. Sair com um código de erro

Eu tive que ligar process.exit(code) para um manipulador de events de exit , ou então o e-mail não será enviado desde que process.exit(code) diretamente mata events asynchronouss.

 #!/usr/bin/nodejs var mailer = require('nodemailer'); var transport = mailer.createTransport(); mail = { to: 'Dave Bowman', from: 'HAL 9000', subject: 'Sorry Dave', html: 'Im sorry, Dave. Im afraid I cant do THAT.' } transport.sendMail(mail); //process.exit(1); process.on('exit', function() { process.exit(1); }); 

Do código você pode usar process.exit([errorcode]) onde [errorcode] é um inteiro opcional ( 0 é o padrão para indicar sucesso).

Se você estiver usando o Read Eval Print Loop (REPL) , você pode usar Ctrl + D ou digitar .exit

Alternativamente, no Windows ou Linux, você pode usar Ctrl + C , Ctrl + C

No Mac, o comando é Ctrl + Z , Ctrl + Z

Sair

 let exitCode = 1; process.exit(exitCode) 

Códigos de Saída Úteis

 1 - Catchall para erros gerais
 2 - Uso indevido de builtins de shell (de acordo com a documentação do Bash)
 126 - Comando invocado não pode executar
 127 - “comando não encontrado”
 128 - Argumento inválido para sair
 128 + n - sinal de erro fatal “n”
 130 - Script terminado por Control-C
 255 \ * - sair do status fora do intervalo

Como @Dominic apontou, lançar um erro não capturado é melhor prática em vez de chamar process.exit ([code]) :
process.exitCode = 1; throw new Error("my module xx condition failed");

Linha de comando

Pressione CTRL + C duas vezes

OU

Digite .exit e pressione enter

Arquivo de script

 process.exit(code) 

Eu era capaz de obter todos os meus processos de nó para morrer diretamente do shell Git Bash no Windows 10, digitando taskkill -F -IM node.exe – isso termina todos os processos do nó no meu computador ao mesmo tempo. Eu encontrei também poderia usar taskkill //F //IM node.exe . Não tenho certeza porque ambos - e // trabalham neste contexto. Espero que isto ajude!

Pressione Ctrl + C duas vezes ou .exit .

 > (To exit, press ^C again or type .exit) > 

se você quiser sair do aplicativo do nó js, então escreva

 process.exit(1) 

no seu código