通过 Node.js 控制台获取用户输入

新手上路,请多包涵

我刚开始使用 Node.js,不知道如何获取用户输入。我正在寻找 python 函数的 JavaScript 对应物 input() 或 C 函数 gets 。谢谢。

原文由 Serket 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 600
2 个回答

您可以使用 3 个选项。我将引导您完成这些示例:

(选项1) prompt-sync: 在我看来,是比较简单的一种。它是 npm 上可用的一个模块,您可以参考文档以获取更多示例 prompt-sync

 npm install prompt-sync

 const prompt = require("prompt-sync")({ sigint: true });
const age = prompt("How old are you? ");
console.log(`You are ${age} years old.`);

(选项 2) 提示:这是 npm 上可用的另一个模块:

 npm install prompt

 const prompt = require('prompt');

prompt.start();

prompt.get(['username', 'email'], function (err, result) {
    if (err) { return onErr(err); }
    console.log('Command-line input received:');
    console.log('  Username: ' + result.username);
    console.log('  Email: ' + result.email);
});

function onErr(err) {
    console.log(err);
    return 1;
}

(选项 3) readline : 它是 Node.js 中的一个内置模块。你只需要运行下面的代码:

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

rl.question("What is your name ? ", function(name) {
    rl.question("Where do you live ? ", function(country) {
        console.log(`${name}, is a citizen of ${country}`);
        rl.close();
    });
});

rl.on("close", function() {
    console.log("\nBYE BYE !!!");
    process.exit(0);
});

享受!

原文由 Willian 发布,翻译遵循 CC BY-SA 4.0 许可协议

这也可以通过 promises 在本地 完成。它也比使用外部世界的 NPM 模块更安全。不再需要使用回调语法。

来自@Willian 的更新答案。这将适用于 async/await 语法和 es6/7。

 const readline = require('readline');

const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
const prompt = (query) => new Promise((resolve) => rl.question(query, resolve));

// Usage inside aync function do not need closure demo only*
(async() => {
  try {
    const name = await prompt("What's your name: ");
    // Can use name for next question if needed
    const lastName = await prompt(`Hello ${name}, what's your last name?: `);
    // Can prompt multiple times
    console.log(name, lastName);
    rl.close();
  } catch (e) {
    console.error("Unable to prompt", e);
  }
})();

// When done reading prompt, exit program
rl.on('close', () => process.exit(0));

原文由 Josh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题