在开发前端项目时,我们经常需要与用户进行交互,需要输入一些必要的参数。而使用 readline
与 process.stdin
等原生 Node.js 模块,实现这种交互体验比较麻烦。此时,一个叫做 ask-questions
的 npm 包,就能够很好地解决这个问题。本文将介绍如何使用 ask-questions
包进行用户输入问答,并提供相应的示例代码。
安装
使用 npm 进行安装:
npm install ask-questions
在安装完成后,在代码中引用:
const ask = require('ask-questions');
使用
使用 ask-questions
包非常简单,只需要传入一个问题列表,然后 ask()
方法就会自动根据问题列表来提出问题,并等待用户输入答案。该方法返回一个 Promise 对象,通过 then()
方法可以获取用户输入的答案。
下面是一个简单的例子,问询用户的姓名和年龄:
-- -------------------- ---- ------- ----- --------- - - - ----- ------- --------- ----- -- ---- ------ -- - ----- ------ --------- ---- --- --- ----- - -- --------------------------- -- - ----------------- ---- -- ------------------- ---------------- --- -------------- ----- ------- ---
用户进行了如下输入:
What is your name? John How old are you? 18
则输出:
Your name is John. You are 18 years old.
可选参数
ask-questions
包还提供了一些可选参数,以便更好地满足我们的需求。
prefix
用于输出问题前的前缀,默认为 Question:
,我们可以根据自己的需求进行修改。
-- -------------------- ---- ------- ----- --------- - - - ----- ------- --------- ----- -- ---- ------ -- - ----- ------ --------- ---- --- --- ----- - -- -------------- - ------- ------- - --------------- -- - ----------------- ---- -- ------------------- ---------------- --- -------------- ----- ------- ---
override
用于覆盖已有的参数值,当用户输入的参数值与已有的参数值重复时,是否进行覆盖,默认为 false
。
-- -------------------- ---- ------- ----- --------- - - - ----- ------- --------- ----- -- ---- ------ -- - ----- ------ --------- ---- --- --- ----- - -- -------------- - --------- ---- --------------- -- - ----------------- ---- -- ------------------- ---------------- --- -------------- ----- ------- ---
深度解析
在使用 ask-questions
包时,需要注意以下几点。
参数列表格式
参数列表是一个数组,每一项都是一个问题对象,包括两个属性:name
和 question
。其中,name
是问题的名称,question
是问题的描述。
-- -------------------- ---- ------- ----- --------- - - - ----- ------- --------- ----- -- ---- ------ -- - ----- ------ --------- ---- --- --- ----- - --
Promise 对象
ask()
方法返回一个 Promise 对象,通过 then()
方法可以获取用户输入的答案。
ask(questions).then(answers => { console.log(answers) });
参数值的覆盖
当使用 override
参数时,需要注意用户输入的答案是否会覆盖已有的答案。如果我们需要对用户输入的所有答案进行校验,可以在 Promise 回调中进行处理,给用户一个反馈。
ask(questions, { override: true }).then(answers => { if (answers.age < 18) { console.log(`Sorry, you are not allowed to enter the website.`); return; } console.log(`Welcome, ${answers.name}.`); });
总结
ask-questions
包简化了 Node.js 与用户交互的流程,让开发者更加专注于业务逻辑。我们可以通过 prefix
参数和 override
参数等,对交互过程进行更加细致的控制。无论是在前端还是后端的开发中,都可以使用该包,提升用户体验,增强代码的可读性和可维护性。
完整的示例代码如下:
-- -------------------- ---- ------- ----- --- - ------------------------- ----- --------- - - - ----- ------- --------- ----- -- ---- ------ -- - ----- ------ --------- ---- --- --- ----- - -- -------------- - ------- ------- -- --------- ---- --------------- -- - -- ------------ - --- - ------------------- --- --- --- ------- -- ----- --- ----------- ------- - --------------------- ------------------- ---
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f7b238a385564ab6a16