`

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

 
阅读更多

题记:

   这几天一直在学习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来刷题的同学使用!

  • 大小: 20.9 KB
0
0
分享到:
评论

相关推荐

    Node.js-tmpin-添加stdin支持至任何CLI应用程序接受文件输入

    tmpin - 添加stdin支持至任何CLI应用程序接受文件输入

    node.js命令行教程图文详解

    本文先介绍原生的node.js实现命令行交互,了解原生的api,然后通过commander.js和inquirer.js实现一个完整的交互命令行工具。 项目地址 process (进程) process对象是一个全局变量,它提供了当前node.js进程的信息...

    yode:使用GUI消息循环的Node.js的分支

    Yode是Node.js的一个分支,它将其事件循环替换为GUI消息循环,它旨在与一起使用。 对Node.js的更改 事件循环已替换为本地GUI消息循环: 在Linux上是GTK+事件循环。 在macOS上是Cocoa运行循环; 在Windows上是Win...

    Node.js-get-stdin-获得stdin作为一个字符串或缓冲区

    get-stdin - 获得stdin作为一个字符串或缓冲区

    of在您的node.js应用程序中创建一个可执行文件-Node.js开发

    npm i nexe -g Nexe是一个命令行实用程序,可将Node.js应用程序编译为单个可执行文件。 动机和功能自包含的应用程序可以使用npm i nexe -g运行多个应用程序Nexe是一个命令行实用程序,它将Node.js应用程序编译为单个...

    node 标准输入流和输出流代码实例

    这篇文章主要介绍了node 标准输入流和输出流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用node 在 CMD 控制台获取输入的指令: 方式一: ...

    node:node_test

    process.stdout是标准输出流 / process.stdin是标准输入流 / process.argv是命令行参数数组 / process.pid 当前进程编号 1.3 console :console.log() / console.error() / console.trace() 1.4 Buffer :缓存 1.5 ...

    nexe:of从node.js应用程序中创建一个可执行文件

    npm i nexe -g Nexe是一个命令行实用程序,它将您的Node.js应用程序编译为单个可执行文件。动机和特点自包含的应用程序能够使用不同的node.js运行时运行多个应用程序。 分发二进制文件而无需节点/ npm。 等幂构建...

    Node.js API详解之 readline模块用法详解

    本文实例讲述了Node.js API详解之 readline模块用法。分享给大家供大家参考,具体如下: Node.js API详解之 readline readline 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行。 它...

    stdin:为REPL体验而精心设计的Node.js轻巧,交互式且优雅的输入

    Stdin Node.js轻量级和交互式标准输入(stdin)专为REPL(类似)体验而设计(具有自动完成功能和历史记录)。 在后台,它使用process.stdin和TTY Stream,并启用了原始模式来逐个捕获键。 使用SlimIO CLI进行演示...

    im:用于 Node.JS 的基于 Stream 的 ImageMagick 包装器

    我是 的基于 Stream 的包装器。安装$ npm install im用法 // resizer.jsvar im = require ( 'im' ) ;im ( process . stdin ) . resize ( process . argv [ 2 ] ) . convert ( process . stdout ) $ curl ...

    dac-ajax-node:通过PHP代理对服务器端node.js的Ajax访问

    dAc-ajax节点Ajax通过PHP代理访问服务器端node.js,并内置支持通过STDIN或在命令行上传递内容。 这在由于端口限制或其他原因而无法运行node.js服务器但可以运行PHP的环境中很有用。 在浏览器中使用ajax-node.js,在...

    proxy-server:Node.JS类

    这是作为CodePath要求提交的Node.js代理服务器。 花费时间:2小时 完全的: []必需:使用相同的HTTP标头和正文回显到端口8000请求 []必需:向/从目标服务器代理请求/响应 []必需:可通过--host ,-- --port或--url...

    sleepyhollow-phantom:PhantomJS 绑定器,用于与 Node.js 进行双向通信

    PhantomJS 绑定器,用于与 Node.js 进行双向通信。 两个模块中的 IPC 库,通过stdin和stderr与结合使用。 不需要socket.io或服务器页面黑客。 用法 要从 Node.js 接收消息,需要并调用sleepyhollow 。 这将返回一个...

    sleepyhollow-node:用于与 PhantomJS 进行双向通信的 Node.js binder

    Node.js 绑定器,用于与 PhantomJS 进行双向通信。 两个模块中的 IPC 库,通过stdin和stderr与结合使用。 不需要socket.io或服务器页面黑客。 Sleepyhollow 支持发送和接收任何类型。 用法 要从 Node.js 向 ...

    Node.js之readline模块的使用详解

    在node.js命令行模式下默认引入了readline模块,但如果是使用node.js运行脚本的话,则需要自己通过require(‘readline’)方式手动引入该模块。 怎么使用readline 创建实例 首先、创建一个接口实例,提供一个...

    node-lame:Node.js与libmp3lame和libmpg123的本机绑定

    这是一个使用node-lame将来自process.stdin原始PCM数据编码为MP3文件的示例,该文件通过管道传输到process.stdout : var lame = require ( 'lame' ) ; // create the Encoder instance var encoder = new lame . E

    livereload-nodejs-debug-docker:在启用livereload的Docker容器中以调试模式运行Node.js的示例!

    使用livereload和Docker调试Node.js应用该存储库是如何在启用实时重新加载的情况下从Docker以调试模式运行Node.js程序的示例。演示版介绍有两种不同的调试Node.js应用程序的方法。1-仅使用终端在docker-compose上...

    node.js:用代码路径学习node.js

    这是作为 CodePath 的要求提交的 Node.js 代理服务器。 花费时间:[1 小时] 完全的: [完成] 必需:对端口8000请求使用相同的HTTP标头和正文回显 [完成] 必需:请求/响应被代理到/从目标服务器 [完成] 必需:目标...

    详细分析Node.js 多进程

    我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout 和...

Global site tag (gtag.js) - Google Analytics