概述
一、入门知识
.
Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言;
Node.js采用的Javascript引擎是来自Google Chrome的V8;运行在浏览器外不用考虑头疼的Javascript兼容性问题
采用单线程、异步IO与事件驱动的设计来实现高并发(异步事件也在一定程度上增加了开发和调试的难度);
Node.js内建一个HTTP服务器,所以对于网站开发来说是一个好消息;、
二、部署sublime nodejs环境
在GitHub下载插件 https://github.com/tanepiper/SublimeText-Nodejs
修改C:UserssherryAppDataRoamingSublime Text 3PackagesSublimeText-Nodejs-master下两个文件
测试
Ctrl+B编译后
三、事件模块
events是node.js 最重要的模块,events模块只提供了一个对象events.EventEmitter,EventEmitter 的核心是事件发射与事件监听器。
Node.js中大部分的模块,都继承自Event模块。
与DOM树上事件不同,不存在事件冒泡、逐层捕获等行为。
EventEmitter 支持若干个事件监听器。当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
在nodejs根目录下运行
/*
EventEmitter.emit(event, [arg1], [arg2], [...]) 触发指定事件
参数1:event 字符串,事件名
参数2:可选参数,按顺序传入回调函数的参数
返回值:该事件是否有监听
*/
/*
EventEmitter.once(event, listener) 为事件注册一次性监听,触发一次后移除监听
参数1:event 字符串,事件名
参数2:回调函数
*/
/*
EventEmitter.removeListener(event, listener) 移除指定事件的监听器
注意:该监听器必须是注册过的
PS:上一个例子之后以会失败,很大原因就是忽略了监听器,理所当然的认为传个事件名就OK了,所以就悲剧了!
*/
emitter.removeListener的第二个参数是要移除的监听,而非移除成功后的回调函数!!!!!
/*
EventEmitter.removeAllListeners([event]) 移除(批定事件)所有监听器,也可以不传参数直接执行
参数1:可选参数,event 字符串,事件名
*/
emitter.removeAllListeners();
/*
EventEmitter.listeners(event) //返回指定事件的监听数组
参数1:event 字符串,事件名
*/
给some_events注册两个监听,调用emitter.listeners函数,传入some_events事件名,接收函数返回值;
从结果可以看出,返回值接收到some_events所有注册监听的集合!
/*
EventEmitter.setMaxListeners (n) 给EventEmitter设置最大监听
参数1: n 数字类型,最大监听数
超过10个监听时,不设置EventEmitter的最大监听数会提示:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added.
Use emitter.setMaxListeners() to increase limit.
设计者认为侦听器太多,可能导致内存泄漏,所以存在这样一个警告
*/
EventEmitter.listenerCount(emitter, event)
返回指定事件的监听数
四、模块
通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取;核心模块具有最高的加载优先级(有模块与核心模块同名时会体现)
Node.js还有一类模块为文件模块,可以是JavaScript代码文件(.js作为文件后缀)、也可以是JSON格式文本文件(.json作为文件后缀)、还可以是编辑过的C/C++文件(.node作为文件后缀);
前面提到文件后缀可以省略,Nodejs尝试加载的优先级 js文件 > json文件 > node文件
var counter = require('./count.js')
console.log('第一次调用')
counter.seOutputVal(10); //设置从10开始计数
counter.setIncrement (10); //设置增量为10
counter.printNextCount();
counter.printNextCount();
/*
require多次调用同一模块不会重复加载
*/
var counter = require('./count');
console.log('第二次调用模块');
counter.printNextCount();
node.js通过requirerequire多次调用同一模块不会重复加载,Node.js会根据文件名缓存所有加载过的文件模块,所以不会重新加载了
注意:通过文件名缓存是指实际文件名,并不会因为传入的路径形式不一样而认会是不同的文件
exports和module.exports 区别
exports仅仅是module.exports的一个地址引用。nodejs只会导出module.exports的指向,如果exports指向变了,那就仅仅是exports不在指向module.exports,于是不会再被导出。
module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是module.exports而不是exports。
所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是module.exports本身不具备任何属性和方法。
如果,module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。
总结:
1.最好别分别定义module.exports和exports,尽管module.exports可以覆盖exports
2.NodeJs开发者建议导出对象用module.exports,导出多个方法和变量用exports
其他
最后
以上就是可爱电话为你收集整理的node入门知识、环境配置、事件、模块一、入门知识二、部署sublime nodejs环境三、事件模块四、模块的全部内容,希望文章能够帮你解决node入门知识、环境配置、事件、模块一、入门知识二、部署sublime nodejs环境三、事件模块四、模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复