我想做一个简单的服务器http服务器和一些控制台扩展。我找到了要从命令行数据读取的代码片段。
var i = rl.createInterface(process.stdin, process.stdout, null);
i.question('Write your name: ', function(answer) {
console.log('Nice to meet you> ' + answer);
i.close();
process.stdin.destroy();
});
为了反复问这些问题,我不能简单地使用while(done) { }
循环?同样,如果服务器在提问时收到输出,它会破坏这一行。
发布于 2011-11-15 07:39:04
您不能执行"while(done)“循环,因为这需要阻塞输入,而这是node.js不喜欢做的事情。
而是设置一个回调函数,在每次输入内容时调用:
var stdin = process.openStdin();
stdin.addListener("data", function(d) {
// note: d is an object, and when converted to a string it will
// end with a linefeed. so we (rather crudely) account for that
// with toString() and then trim()
console.log("you entered: [" +
d.toString().trim() + "]");
});
发布于 2012-12-01 06:18:12
为此,我使用了另一个API。
var readline = require('readline');
var rl = readline.createInterface(process.stdin, process.stdout);
rl.setPrompt('guess> ');
rl.prompt();
rl.on('line', function(line) {
if (line === "right") rl.close();
rl.prompt();
}).on('close',function(){
process.exit(0);
});
这允许在循环中提示,直到答案为right
。此外,它还提供了一个很好的小console.You,可以在@ http://nodejs.org/api/readline.html#readline_example_tiny_cli中找到详细信息
发布于 2016-05-24 22:51:55
自12‘年以来,Readline API发生了很大的变化。文档显示了一个从标准流中捕获用户输入有用示例:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What do you think of Node.js? ', (answer) => {
console.log('Thank you for your valuable feedback:', answer);
rl.close();
});
https://stackoverflow.com/questions/8128578
复制相似问题