Creé un script de nodo que debería ejecutarse como un proceso en segundo plano. Inmediatamente después de que el script comience a ejecutarse, necesito obtener algunos datos de usuario (nombre de usuario y contraseña).
Después de obtener los datos del usuario, deseo cerrar la terminal, pero el proceso debería continuar ejecutándose en segundo plano.
Para complicar las cosas, la secuencia de comandos del nodo se está compilando con pkg lib y se iniciará como un .exe
Aquí está el código que se ejecutará:
async function init() { try { await fetchConfig(); const credentials = await getCredentials(); // this one prompts the request for user input watchForNewFiles(credentials); // that one should use the credentials and continue running in the background. } catch (e) { console.error(e); } }en eso();
Aquí hay una solución:
// Neccesary libs let fs = require("fs"); let child_process = require("child_process"); // Filename should end in .bat let filename = "__tmp.bat"; // Main function, call this to prompt the values. function prompt() { // Write batch script // Prompts 2 variables & writes them as JSON into the same file fs.writeFileSync(filename,`@echo off set /p Var1="Name: " set /p Var2="Password: " echo {"name": "%Var1%", "password": "%Var2%"} > ${filename} exit`); // Execute the script in a cmd.exe window & write the result into stdout & parse it as JSON let result = JSON.parse(child_process.execSync(`start /w cmd /c ${filename} && type ${filename}`)); // Delete the file fs.unlinkSync(filename); return results; } // Example usage: console.log(prompt()) // prints { name: 'hi', password: 'world' }Probado como un paquete binario node14-win-x64, funciona perfectamente.
AFAIU, esto no es posible hacerlo desde el interior del código de ejecución de node.js por sí mismo.
Tienes que usar algún tipo de herramienta para poner el programa node.js en segundo plano.
Esta respuesta enumera varias herramientas para este propósito.
Este también es útil.