NodejsREPL环境:表示一个电脑的环境,可以在终端输入命令并接收系统的响应
Nodejs自带交互解释器
读取:读取用户输入,解释输入了javascript数据结构并存储在内存中
执行:执行输入的数据结构
打印:输出结果
进入REPL:
可以在命令提示符面板输入$node(window系统不需要,mac系统需要)
REPL命令:
ctrl+c:退出当前终端
ctrl+c按两次:退出Node REPL环境
ctrl+d:退出REPL
上下键:查看历史命令
.clear:退出多行表达式
.save filename:保存当前的Node REPL会话到指定文件
.load filename:载入当前Node REPL会话的文件内容
tab:列出当前命令
.help:列出使用命令
node测试或者运行js文件,使用console面板(console面板与之前是一样的)
window命令
mkdir 名称:新建文件夹
cd 名称:进入文件夹
- 关机:`shutdown /s`
- 重启:`shutdown /r`
- 注销:`shutdown /l`
- 休眠:`shutdown /h /f`
- 取消关机:`shutdown /a`
- 定时关机:`shutdown /s /t 3600`(3600 秒后关机)
- 切换磁盘:`d:`(进入 d 盘)
- 切换磁盘和目录:`cd /d d:/test`(进入 d 盘 test 文件夹)
- 进入文件夹:`cd \test1\test2`(进入 test2 文件夹)
- 返回根目录:"cd\""
- 回到上级目录:`cd ..`
- 新建文件夹:`md test`
- 显示目录中文件列表:`dir`
- 显示目录结构:`tree d:\test`(d 盘 test 目录)
- 显示当前目录位置:`cd`
- 显示指定磁盘的当前目录位置:`cd d:`
删除文件夹:rd
全局对象:
在nodejs中,在一个模块中定义的变量,函数或方法只能在该模块中可用,但可以通过exports对象的使用将其传递到
模块外部
javascript中有一个特殊的对象,成为全局对象,他及其所在的属性都可以在程序的任何地方访问,即全局变量
在浏览器javascript中,通常window是全局对象,而nodejs中的全局对象是global,所有全局变量都是global对象
的属性
在nodejs我们可以直接访问到glodal的属性,而不需要在应用中包含他,glodal对象代表nodejs中的全局变量、函数
或对象都是该对象的一个属性值
全局对象和全局变量
glodal最根本的作用是作为全局变量的宿主。按照ECMAScript的定义,满足以下条件的变量是全局变量
在最外层定义的变量
全局对象的属性
隐式定义的变量
当你定义一个全局变量时,这个变量同时也会作为全局对象的属性,反之亦然,需要注意的是,在nodejs中你不可以
在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文
永远使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码耦合风险
全局变量避免使用var定义,避免引入全局变量
全局变量__filename变量(下划线两个)
__filename:表示当前正在执行的文件脚本文件名
全局变量__dirname变量
__dirname表示当前执行脚本所在的目录
settimeout全局函数,与js中的settimeout作用类似:在控制台去回调一个函数,但只执行一次
require():可以使用require函数来加载模块
require.resolve函数:查询某个模块文件的带有完整性的绝对路径文件名
require.cache:该对象表示缓存了所有已被加载的模块
EventEmitter
在node中,用于实现各种事件处理的event模块中,EventEmitter类,所有可能触发的事件的对象都是继承了EventEmitter类的子类的实例对象
emitter.addListener(event,listener)为指定事件添加一个监听器到监听器数组的尾部
emitter.on(event,listener)注册一个事件
emitter.once(event,listener)注册一个一次性事件,触发后就会被抹掉
emitter.removeListener(event,listener)在时间队列中剔除某一个事件
emitter.removeAllListeners([event])删除整个事件队列,或多个事件
nodejs事件循环:
nodejs是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高
nodejs的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发
nidejs基本上所有的事件机制都是用设计模式中观察者模式实现的
nodejs单线程类似进入一个while的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,
如果有事件发生就调用该回调函数
事件驱动
nodejs使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理然后去服务下一个web请求
当这个请求完成,他被放回处理队列,当到达队列开头,这个结果被返回给用户
这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作(这也被称之为非阻塞式IO或者事件驱动IO)
在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数
虽然node是单线程语言,但是通过事件轮循机制实现多并发
模块:
nodejs中都是以模块单位划分所有功能,一个nodejs应用程序由大量的模块组成,没一个模块都是一个js脚本
nodejs可以自己编写代码或者从网上下载以下几种模块
后缀为.js的javascript文件
后缀为.node的经过编译后的二进制模块文件
后缀为json的文件
加载模块需要完整路径,可以使用./代表当前路径