Tengo un script node.js que hace un poco de registro en un archivo usando WriteStream. En ciertos eventos, quiero detener la ejecución del script, es decir, advertir que inicie sesión y salga inmediatamente después de eso. Siendo Node.js asyncronious no permite que hagamos de ella hacia adelante como:¿Cuál es la forma correcta de salir del script node.js con un mensaje de registro?
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
process.exit(1);
En lugar de añadir un mensaje a delme.log este script no hace nada con el archivo. El manejo del evento de 'salida' y el enjuague no funciona. La única manera de escribir el último mensaje de registro antes de exitting encontrado hasta ahora es envolver en el process.exit(1)
setTimeout()
:
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
setTimeout(function(){
process.exit(1);
}, 30);
Sin embargo, en esta forma no se detiene la ejecución del script de inmediato y el script se ejecuta por alguna tiempo después de que sucedió el evento crítico. Entonces, me pregunto si hay otras formas de salir de un script con un mensaje de registro.
Gracias! Esa es una variación de la llamada a setTimeout(), que no bloquea la ejecución del script. Si hay un código que no debería ejecutarse después de la excepción, este patrón podría convertirse en una preocupación. – nab
Actualizado mi respuesta. – fent
En mi caso particular, uso WriteStream para el registro, por lo que la llamada real sería log.error ('Algo malo pasó') que formatea el mensaje con el nivel de registro apropiado y agrega otras cosas. Por lo tanto, sería difícil implementar este fragmento sin cambiar la interfaz del registrador. Estoy publicando mi solución alternativa como una solución alternativa. La pregunta inicial está perfectamente respondida. ¡Gracias! – nab