一些node模块的学习思考
12月14日清单
1 readline模块
var readline = require("readline");
// input 是必须的,output是可选的
rl = readline.createInterface({input:process.stdin,output:process.stdout});
rl.question("question?",(answer)=>{ 处理 rl.close()})
rl.on("line",(line)=>{处理})
rl.on("close",()=>{处理})
rl.setPrompt("你的提示符");
rl.prompt();
rl.write(data[,key])
rl.write("删除缓存");
rl.write(null,{ctrl:true,name:'u'}); 可删除尚未有换行的缓冲区内容
可以将rl设为input:fs.createReadStream('txtfile'); 来借助line事件来对文件进行逐行读取
2 dgram模块
只能通过var server = dgram.createSocket('udp4')来获取 ipv4的udp实例,不能new
事件:close error
listening 当server.bind()执行后
message 当有新的数据报可用时
socket.address() 会返回一个对象,其中有远程连接的地址,端口,协议(v4/v6);
即socket.address().address socket.address().port socket.address().family
socket.bind([port][,address][,callback]); bind内可选
或 socket.bind(options[,callback]) options是一个包含有地址端口等信息的对象
socket.bind(4000)
// 0.0.0.0:4000
// 当没有端口时,端口随机分配.当没有地址时,地址为0.0.0.0
// 好像同localhost用起来没什么区别,未深入研究? 答案在下方
// 所有接口地址ipv4 0.0.0.0 ipv6 ::0 即会监听所有地址,所以server.address()返回的信息为localhost
// bind(port,address) 端口在前,顺序不能乱
// bind({address:'fan',port:4000}) 通过传一个options对象,可以避免参数顺序不对的情况发生
// bind后会出发listening事件,并执行bind内的回调函数,所以bind内的回调和监听listen事件选一即可,
// 如果都有的话都会触发,同时的
socket.close([callback]);
socket.send(msg,[offset,length,]port,address[,callback])
注意length的值,当有中文等多字节字符串时,需要使用Buffer.byteLength(str)来确定字节数,
这里发送的是字节数,而不是字符数.
dgram.createSocket(options[,callback]); options对象,包含type(string)属性和reuseAddr(布尔)属性
dgram.createSocket(type[,callback]); type值为udp4或udp6,callback响应message事件
3 assert模块
var assert = require("assert");
// assert中可选的msg是当错误时,显示的错误信息
// assert.notEqual(1,1);
// assert(false,"it's a false");
// assert.ok(false,"it's a false"); // assert(val,msg) 等同于 assert.ok(val,msg)
assert.deepEqual(Error('a'),Error('b'));// 当对象的自身所拥有的属性都相等时,就深度相等
assert.deepEqual({a:1},{a:'1'}); // 相等,对每个属性的 ==
// assert.deepStrictEqual({a:1},{a:'1'}) // 不相等,=== 不会进行转换
assert.equal(1,'1') // 相等 整体的 ==
assert.notEqual(1,2); // !=
assert.notStrictEqual(1,'1'); // !==
// 当ifError() 括号内的值为真时,则抛出错误,及括号内的值,可以用于回调内的error检验
// assert.ifError('error');
// assert.ifError(new Error());
// assert.ifError(0); // 无错
// assert.ifError(1); // 有错
// assert.fail(1,1,"错误原因",'='); 作用是抛出一个错误,文字为第三个参数,如果第三个参数未定义,
则错误提示为,第一个参数加最后的操作符加第二个参数
assert.fail(0,0,"hh",'=');
4 一个小技巧
当有递减发生而又不想出现负值,可以使用return Math.max(val,0); 来确保返回值不为负数,
减少了写if判断语句,程序中尽量不出现if语句,让其更流畅的执行
5 EventEmitter部分
EventEmitter实例的常用方法
emitter.addListener()
emitter.getMaxListeners();
emitter.listenerCount();
emitter.listeners();
emitter.on();
emitter.once();
emitter.removeAllListeners();
emitter.removeListener();
emitter.setMaxListeners();
net.Server会在收到新的连接时发送'request'事件,fs.ReadStream会在打开文件时发送'open'事件
stream.Readable对象会在每次读取数据时发送'data'事件
myEmitter.emit("eventName",'a','b');可以传多个参数,只要响应的回调函数接收处理就行
一些node模块的学习思考的更多相关文章
- node模块加载层级优化
模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载.但是随着应用规模的加大,目录层级越来越深,若是在某个 ...
- 【干货分享】Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- Commonjs规范及Node模块实现
前面的话 Node在实现中并非完全按照CommonJS规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性.本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于java ...
- Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- Node.js知识点学习
Node.js知识点学习 一.基本概念 Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台.可以说,Node.js开创了javascript模块化开发的先河,早期 ...
- 【转】Commonjs规范及Node模块实现
前言: Node在实现中并非完全按照CommonJS规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性.本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于javas ...
- node的重点学习笔记(1)————node
node的重点学习笔记(1)----node 提到node就必须提一下他的npm了,npm是世界上最大的开放源代码的生态系统.通俗来说这就如同亚马逊丛林,要啥物种有啥物种,一个巨大的生态圈,里面有一堆 ...
- Request模块入门学习
使用指令npm install --save request来安装模块,然后使用var request = require('request')完成引用. 对于GET请求,主要是获取目的url中数据. ...
- [转]模块化——Common规范及Node模块实现
Node在实现中并非完全按照CommonJS规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性.本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于javascrip ...
随机推荐
- DataTable数据显示于MVC应用程序
这篇博文是把DataTable的数据显示于MVC的应用程序上. 首先我们在数据库中创建一个表,并添加数据,然后创建存储过程: 接下来,我们去下载一个BusinessBase组件:http://www. ...
- C# 全文搜索Lucene
全文出自:https://blog.csdn.net/huangwenhua5000/article/details/9341751 1 lucene简介1.1 什么是luceneLucene是一个全 ...
- tomcat 防火墙如何设置
tomcat 防火墙能够有效的防护我们电脑,那么我们要怎么样去设置呢?下面由学习啦小编给你做出详细的tomcat 防火墙设置方法介绍!希望对你有帮助! tomcat 防火墙设置方法一: 1.为tomc ...
- 【游记】CCHO TY国初划水记
没想到第一篇游记竟然是化学国初(其实是上次SXACM时候懒得写 DAY0 一下午做了5个小时的校车,服务区水真贵 肝了4个小时模拟题,颠到崩溃. 下榻在距离山大附不远的一个酒店,高三人好多哇,我们年级 ...
- 胡同门牌号-2015决赛Java语言A组第一题
标题:胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的.有一天小明突然发现了有趣的事情:如果除去小明家不算,胡同里的其它门牌号加起来,刚好是 ...
- 使用 Node.js 搭建微服务网关
目录 Node.js 是什么 安装 node.js Node.js 入门 Node.js 应用场景 npm 镜像 使用 Node.js 搭建微服务网关 什么是微服务架构 使用 Node.js 实现反向 ...
- Evolution(矩阵快速幂)zoj2853
Evolution Time Limit: 5 Seconds Memory Limit: 32768 KB Description Evolution is a long, long pr ...
- python3.8 新特性
https://docs.python.org/3.8/whatsnew/3.8.html python 3.8的新功能本文解释了与3.7相比,python 3.8中的新特性. 有关完整的详细信息,请 ...
- Nginx的常用功能
1.规范nginx的配置文件 在企业中我们的虚拟主机可能会很多,配置文件的内容也会有很多,这时候我们就可以规范一下我们的配置文件,把每个虚拟主机按照网站的域名或者是功能取名,放到统一的文件夹中,当然我 ...
- Java语言的特点以及Java与C/C++的异同
Java语言的特点 1. Java为纯面向对象的语言,能够直接反应现实生活中的对象,容易理解,编程更容易. 2.跨平台,java是解释性语言,编译器会把java代码变成中间代码,然后在JVM上解释执行 ...