当前位置:首页 » JavaScript技术

基于Node.js的底层循环输入与process.stdin触发end事件

2017-12-06 13:20 本站整理 浏览(9)

题记:

   这几天一直在学习Node.js,正好学习到了Node的process对象,以及此对象中的一些内容。下面,今天就来讲讲怎么利用原生的process来实现,基本的循环输入!

正文:

   首先呢,我们要先来认识一下process对象,什么是process对象呢?process对象其实就是代表着Node.js的应用程序,也是一个全局对象。再次不在赘述,今天我们主要来看看process对象的两个比较特别的属性stdinstdout。

  •     stdin:属性值为一个可用于写入标准输入流的对象,在默认情况下标准输入流是暂停状态需要使用
    process.stdin.resume();
  •     stdout:属性值为一个可用于写入标准输出流的对象

   了解了基本知识,我们可以来看看代码如何实现process的循环输入

process.stdin.setEncoding('utf8');

process.stdin.on('readable', function(){
    var chunk = process.stdin.read(); // 获取到输入的信息
if(typeof chunk === 'string'){
    chunk = chunk.slice(0,-2); // 这个是利用切片,切掉我们的回车\n
    process.stdout.write('stringLength:'+ chunk.length +'\n');
}
if(chunk === ''){
    process.stdin.emit('end'); // 触发end事件
    return
}
if (chunk !== null) {
    process.stdout.write('data: '+ chunk +'\n');
}
});

process.stdin.on('end', function() {
    process.stdout.write('end');
});

   
    

    大家可以看到,当我输入字符串时,可以获取到我字符串的长度,并输出长度与字符串,

    而我只输入回车时,我用

slice(0,-2)

    剪切掉了\n,实现了过滤回车的效果。

    其中值得注意的是,如何触发process.stdinend事件!

    使用

    

process.stdin.exit()

    并不能触发end事件,而我们只能利用

process.stdin.emit('end');

    来触发,值得我们注意哦!也有助于我们想用node来刷题的同学使用!