Javascript Node.js中的用户输入
我正在编写一个程序,它将创建一个数字数组,并将每个数组的内容加倍,并将结果存储为键/值对。早些时候,我对数组进行了硬编码,所以一切都很好 现在,我稍微改变了逻辑,我想从用户那里获取输入,然后将值存储在数组中 我的问题是,我不知道如何使用node.js实现这一点。我已经使用npm安装提示符安装了提示符模块,并且已经阅读了文档,但是没有任何效果 我知道我在这里犯了一个小错误 这是我的密码:Javascript Node.js中的用户输入,javascript,node.js,Javascript,Node.js,我正在编写一个程序,它将创建一个数字数组,并将每个数组的内容加倍,并将结果存储为键/值对。早些时候,我对数组进行了硬编码,所以一切都很好 现在,我稍微改变了逻辑,我想从用户那里获取输入,然后将值存储在数组中 我的问题是,我不知道如何使用node.js实现这一点。我已经使用npm安装提示符安装了提示符模块,并且已经阅读了文档,但是没有任何效果 我知道我在这里犯了一个小错误 这是我的密码: //Javascript program to read the content of array of nu
//Javascript program to read the content of array of numbers
//Double each element
//Storing the value in an object as key/value pair.
//var Num=[2,10,30,50,100]; //Array initialization
var Num = new Array();
var i;
var obj = {}; //Object initialization
function my_arr(N) { return N;} //Reads the contents of array
function doubling(N_doubled) //Doubles the content of array
{
doubled_number = my_arr(N_doubled);
return doubled_number * 2;
}
//outside function call
var prompt = require('prompt');
prompt.start();
while(i!== "QUIT")
{
i = require('prompt');
Num.push(i);
}
console.log(Num);
for(var i=0; i< Num.length; i++)
{
var original_value = my_arr(Num[i]); //storing the original values of array
var doubled_value = doubling(Num[i]); //storing the content multiplied by two
obj[original_value] = doubled_value; //object mapping
}
console.log(obj); //printing the final result as key/value pair
//读取数字数组内容的Javascript程序
//每种元素加倍
//将值作为键/值对存储在对象中。
//var Num=[2,10,30,50100]//数组初始化
var Num=新数组();
var i;
var obj={}//对象初始化
函数my_arr(N){return N;}//读取数组的内容
函数加倍(N_加倍)//将数组的内容加倍
{
双倍数量=我的arr(N双倍);
返回双倍数字*2;
}
//外部函数调用
var prompt=require('prompt');
prompt.start();
而(i!=“退出”)
{
i=要求(“提示”);
推数(i);
}
console.log(Num);
对于(变量i=0;i
请在这方面帮助我,谢谢。提示符是异步的,所以您必须异步使用它
var prompt = require('prompt')
, arr = [];
function getAnother() {
prompt.get('number', function(err, result) {
if (err) done();
else {
arr.push(parseInt(result.number, 10));
getAnother();
}
})
}
function done() {
console.log(arr);
}
prompt.start();
getAnother();
这会将数字推送到
arr
,直到按下Ctrl+C,此时将调用done
。对于不想导入另一个模块的用户,可以使用标准的nodejs流程
function prompt(question, callback) {
var stdin = process.stdin,
stdout = process.stdout;
stdin.resume();
stdout.write(question);
stdin.once('data', function (data) {
callback(data.toString().trim());
});
}
用例
现代Node.js示例w/ES6承诺&没有第三方库。
Rick提供了一个很好的出发点,但这里有一个更完整的例子,说明了如何一个问题接着一个问题,并能够在以后参考这些答案。由于读/写是异步的,承诺/回调是用JavaScript编写此类流的唯一方法
const { stdin, stdout } = process;
function prompt(question) {
return new Promise((resolve, reject) => {
stdin.resume();
stdout.write(question);
stdin.on('data', data => resolve(data.toString().trim()));
stdin.on('error', err => reject(err));
});
}
async function main() {
try {
const name = await prompt("What's your name? ")
const age = await prompt("What's your age? ");
const email = await prompt("What's your email address? ");
const user = { name, age, email };
console.log(user);
stdin.pause();
} catch(error) {
console.log("There's an error!");
console.log(error);
}
process.exit();
}
main();
同样,如果您正在构建一个大型命令行应用程序,或者想要快速启动并运行,那么一定要研究诸如和之类的库,它们是功能强大的、经过测试的选项。Node.js实现了一个简单的readline模块,可以异步运行:
函数my_arr(N){return N;}
这有什么意义?编写了一个函数来调用元素,虽然我会删除它。结果后面的10是什么。number?@vamosrafa(我们计算的基数,例如2应该是二进制的)。哦,好的。谢谢你的澄清。所以在这之后,我将不得不在done函数中进行双倍数字的操作,对吗?谢谢。非常好,比引入提示符及其依赖项要轻得多stdin.resume()代码>必要吗?我不熟悉这一点,但在可读流上阅读文档,它说设置“数据”事件处理程序会自动将其取出(c.f.)@JECompton可能没有必要,但我会这样做,因为您可能会在其他地方这样做,例如,允许节点在提示后干净地退出,并且您需要恢复它才能工作。看看我的小例子:拥有一个没有依赖性的东西真是太好了。非常感谢。请确保调用stdin.pause()
,否则节点将使该流保持活动状态…啊,是的,我在示例中进行了更新。谢谢
const { stdin, stdout } = process;
function prompt(question) {
return new Promise((resolve, reject) => {
stdin.resume();
stdout.write(question);
stdin.on('data', data => resolve(data.toString().trim()));
stdin.on('error', err => reject(err));
});
}
async function main() {
try {
const name = await prompt("What's your name? ")
const age = await prompt("What's your age? ");
const email = await prompt("What's your email address? ");
const user = { name, age, email };
console.log(user);
stdin.pause();
} catch(error) {
console.log("There's an error!");
console.log(error);
}
process.exit();
}
main();
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What do you think of Node.js? ', (answer) => {
// TODO: Log the answer in a database
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close();
});