DEV Community

Discussion on: How to prevent readline in Node from exiting on line event?

Collapse
 
devdrake0 profile image
Si

It sounds like you want something like this?

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.prompt("Want to add some newlines?")

rl.on('line', (input) => {
  console.log(`Received: ${input}`);
});

rl.on('SIGINT', () => {
    rl.question('Are you sure you want to exit? ', (answer) => {
      if (answer.match(/^y(es)?$/i)) rl.pause();
    });
});
Collapse
 
michael profile image
Michael Lee 🍕

Si! Thanks so much for helping with your answer! I was able to solve my problem based on your solution. Is SIGINT what is triggered by default when a new line event occurs? So handling the SIGINT event did the trick?

Collapse
 
devdrake0 profile image
Si

No worries mate - glad it was helpful. I've never actually used readline, so it was a good opportunity to give it a spin 😁.

SIGINT is the interrupt signal. The terminal sends it to the foreground process when the user presses ctrl-c. We handle this signal so we can gracefully shut down rl (rl.pause()).

line is the event that is triggered when a new line occurs. I would assume that the default behaviour of a new line is to call rl.pause() but we're capturing the event instead and doing our own thing.