node.js

Cómo salir en Node.js



(16)

¿Cuál es el comando que se utiliza para salir? (Es decir, terminar el proceso Node.js)


Como señaló @Dominic, exit es una mejor práctica en lugar de llamar a process.exit ([código]) :
process.exitCode = 1; throw new Error("my module xx condition failed");


De la documentación oficial de nodejs.org :

process.exit(code)

Finaliza el proceso con el código especificado. Si se omite, exit utiliza el código ''éxito'' 0.

Para salir con un código de ''falla'':

process.exit(1);


Depende de la razón por la que esté dispuesto a salir del proceso node.js, pero en cualquier caso, process.exit() es la última opción a considerar . Una cita de la documentación:

Es importante tener en cuenta que llamar a process.exit() forzará el proceso para salir tan rápido como sea posible, incluso si todavía hay operaciones asíncronas pendientes que aún no se han completado por completo, incluidas las operaciones de E / S a process.stdout y process.stderr .

En la mayoría de las situaciones, no es realmente necesario llamar a process.exit() explícitamente. El proceso Node.js se cerrará solo si no hay trabajo adicional pendiente en el bucle de eventos. La propiedad process.exitCode se puede configurar para indicar al proceso qué código de salida debe usar cuando el proceso salga correctamente.

Veamos las posibles razones por las que podría estar dispuesto a salir del proceso de node.js y por qué debería evitar process.exit() :

Caso 1 - Ejecución completada (script de línea de comando)

Si el script ha llegado a su fin y el intérprete de nodo no sale, esto indica que algunas operaciones asíncronas aún están pendientes. Es incorrecto forzar la terminación del proceso con process.exit() en este punto. Es mejor tratar de entender qué es lo que impide que el script salga de la forma esperada . Y cuando resuelva esto, puede usar process.exitCode para devolver cualquier resultado al proceso de llamada.

Caso 2 - Terminación debido a una señal externa (SIGINT / SIGTERM / otro)

Por ejemplo, si estás dispuesto a cerrar con gracia una aplicación Express . A diferencia del script de línea de comandos, la aplicación Express se ejecuta infinitamente, a la espera de nuevas solicitudes. process.exit() será una mala opción aquí porque interrumpirá todas las solicitudes que están en tramitación. Y algunos de ellos pueden ser no idempotentes (ACTUALIZAR, BORRAR). El cliente nunca sabrá si esas solicitudes se completaron o no en el lado del servidor y podría ser la razón de la inconsistencia de datos entre el cliente y el servidor. La única buena solución es decirle al servidor http que deje de aceptar nuevas solicitudes y espere a que las pendientes terminen con 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"); }); });

Si todavía no sale, vea el caso 1.

Caso 3 - Error interno

Siempre es mejor throw un error, obtendrás un mensaje de error y un seguimiento de pila muy bien formateado. Los niveles superiores de código siempre pueden decidir si pueden manejar el error ( catch ) o dejar que se bloquee el proceso. Por otro lado, process.exit(1) terminará el proceso de manera silenciosa y no habrá posibilidad de recuperarse de esto. Puede ser el único "beneficio" de process.exit() , puede estar seguro de que el proceso terminará.


Desde el código puede usar process.exit([errorcode]) donde [errorcode] es un entero opcional ( 0 es el valor predeterminado para indicar el éxito).

Si está utilizando el ciclo de lectura Read Print Print (REPL) , puede usar Ctrl + D o escribir .exit

Alternativamente, en Windows o Linux puede usar Ctrl + C , Ctrl + C

En Mac, el comando es Ctrl + Z , Ctrl + Z


Desde la línea de comando, .exit es lo que quieres:

$ node > .exit $

Está documentado en los documentos REPL . REPL (Read-Eval-Print-Loop) es lo que se llama la línea de comando Nodo.

Desde un programa normal, use process.exit([code]) .


Presione Ctrl + C dos veces o .exit .

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


Pude hacer que todos mis procesos de nodo mueran directamente desde el shell de Git Bash en Windows 10 escribiendo taskkill -F -IM node.exe : esto finaliza todos los procesos de nodo en mi computadora a la vez. Descubrí que también podría usar taskkill //F //IM node.exe . No estoy seguro de por qué ambos - y // trabajan en este contexto. ¡Espero que esto ayude!


Puede utilizar la función exit .

Si desea salir sin un ''error'', use el código 0 :

process.exit(0);

Para salir con un código de ''falla'' 1 puede ejecutar:

process.exit(1);

El código de "falla" de la falla es específico de la aplicación. Así que puedes usar tus propias convenciones para ello.


Salir

let exitCode = 1; process.exit(exitCode)

Códigos de salida útiles

1 - Catchall for general errors 2 - Misuse of shell builtins (according to Bash documentation) 126 - Command invoked cannot execute 127 - “command not found” 128 - Invalid argument to exit 128+n - Fatal error signal “n” 130 - Script terminated by Control-C 255/* - Exit status out of range


Si desea salir de la aplicación node js, escriba

process.exit(1)

en tu código


Si estás en un terminal Unix o en la línea de comandos de Windows y quieres salir del REPL del nodo, o bien ...

  • Presione Ctrl + C dos veces, o
  • escriba .exit y presione Enter, o
  • presione Ctrl + D al comienzo de una línea (solo Unix)

Solo una nota de que usar process.exit([number]) exit es exit práctica exit .

La razón por la que esto es problemático es porque las escrituras en process.stdout en Node.js no son de bloqueo y pueden ocurrir en múltiples tics del bucle de eventos Node.js. Sin embargo, al llamar a process.exit (), el proceso se cierra antes de que se puedan realizar esas escrituras adicionales en la salida estándar.

En lugar de llamar a process.exit () directamente, el código debería establecer process.exitCode y permitir que el proceso salga de forma natural al evitar programar cualquier trabajo adicional para el bucle de eventos:

Si puede, debe configurar el código de salida y permitir que Node salga correctamente:

process.exitCode = 1;


Tengo una aplicación que quería:

  1. Enviar un correo electrónico al usuario.
  2. Salir con un código de error

Tuve que enlazar process.exit(code) a un controlador de eventos de exit , o de lo contrario no se enviará el correo ya que al llamar a process.exit(code) se eliminan directamente los eventos asíncronos.

#!/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 <B>THAT</B>.'' } transport.sendMail(mail); //process.exit(1); process.on(''exit'', function() { process.exit(1); });


Línea de comando

Presione CTRL + C dos veces

O

Escribe .exit y presiona enter

Archivo de comandos

process.exit(code)


REPL (línea de comando)

  • Presione ctrl + c dos veces

  • Escribe .exit y presiona enter

Archivo de comandos

process.exit(code)

El nodo normalmente sale con el código 0 cuando no hay más operaciones asíncronas pendientes.

process.exit(1) debe usar process.exit(1) para salir con un código de falla. Esto nos permitirá inferir que el nodo no se cerró correctamente y se vio obligado a cerrar.

Hay otros códigos de salida como

3 - Error interno de análisis de JavaScript (muy, muy raro)

5 - Error fatal en el motor v8 javascript

9 - Argumento inválido

Para la lista completa vea los códigos de salida del nodo


Llame al método de exit del objeto de process global:

process.exit()

De la documentación:

process.exit ([código])

Finaliza el proceso con el code especificado. Si se omite, exit utiliza el código ''éxito'' 0 .

Para salir con un código de ''falla'':

process.exit(1);

El shell que ejecutó el nodo debería ver el código de salida como 1.