NodeJs简介
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
中文文档:http://nodejs.cn/api/
环境变量
当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开。
如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止,如果没找到则报错。
I/O(Input/Output)
I/O操作指的是对磁盘的读写操作
Node基础
Node是一个对ES标准一个实现,Node也是一个JS引擎,通过Node可以使js代码在服务器端执行
Node是一款使用js编写的web服务器,底层是C++编写,node中js引擎使用的使用的是chrome的v8引擎
Node的特点:
1、非阻塞、异步的I/O
2、事件和回调函数
3、单线程(主线程单线程,后台I/O线程池)
4、跨平台
Node仅仅对ES标准进行了实现,所以在Node中不包含DOM和BOM
Node中可以使用所有的内建对象
String、Number、Boolean、Math、Date、RegExp、Function、Object、Array
而BOM和DOM都不能使用,但是可以使用console,也可以使用定时器(setTimeOut()、setInterval())
Node可以在后台来编写服务器,Node编写服务器都是单线程的服务器
-进程:进程就是一个一个的工作计划
-线程:线程是计算机最小的运算单位
传统的服务器都是多线程的:每进来一个请求,就创建一个线程去处理请求
Node的服务器是单线程:Node处理请求时是单线程,但是在后台拥有一个I/O线程池
模块化
ES5中没有原生支持模块化,我们只能通过script标签引入js文件来实现模块化
在node中为了对模块管理,引入了CommonJS规范
模块的引用:使用require()函数来引入一个模块
模块的定义:在node中一个js文件就是一个模块
默认情况下在js文件中编写的内容,都是运行在一个独立的函数中,外部的模块无法访问
导出变量和函数:
-使用exports
exports.属性=属性值
exports.方法=函数
-使用module.exports
module.exports.属性 = 属性值;
module.exports.方法 = 函数;
module.exports = {};
模块的标识:模块的标识就是模块的名字或者路径
node中通过模块的标识来寻找模块的
对于核心模块(npm中下载的模块),直接使用模块的名字对其进行引入
var fs=require("fs")
对于自定义的文件模块,需要通过文件的路径来对模块进行引入
包(package)
将多个模块组合为一个完整的功能,就是一个包
包结构
-bin:二进制的可执行文件,一般都是一些工具包这中才有
-lib:js文件
-doc:文档
-test:测试代码
package.json:包的描述文件,包含了包各种相关信息:name、version、dependencies、main、bin
npm(Node Package Manager Node的包管理器)
通过npm可以对node中的包进行上传、下载、搜索等操作。npm会在安装完node以后自动安装。
npm的常用指令
npm -v:查看npm的版本
npm version:查看所有模块的版本
npm init:初始化项目(创建package.json)
npm i/install 包名:安装指定的包
npm i/install 包名 --save:安装指定的包并添加依赖
npm i/install 包名 -g:全局安装(一般是某些工具)
npm i/install:安装当前项目所依赖的包
npm s/search:包名 搜索包
npm r/remove:包名 删除一个包
文件系统(File System)
缓冲区
Buffer和数组的结构非常类似,Buffer是用来存储二进制数据的
Buffer的方法
-Buffer.from(字符串):将一个字符串中内容保存到一个Buffer中
-buf.toString():将buffer转换为一个字符串
-Buffer.alloc(size):创建一个指定大小的buffre对象
-Buffer.allocUnsafe(size):创建一个指定大小的buffer对象,可以包含敏感数据
fs模块
在Node通过fs模块来对系统中的文件进行操作,fs模块是node中已经继承好了,不需要在npm下载,直接引入即可。
引入fs:var fs =require("fs"),fs模块中的大部分操作都提供了两种方法,同步方法(带sync)和异步方法。
写入文件:1、同步写入 2、异步写入 3、简单写入 4、流式写入
读取文件:1、同步读取 2、异步读取 3、简单读取 4、流式读取
方法:
-打开文件
fs.open(path,flags[,model],callback)
fs.openSync(path,flags[,model])
注:flag为读取文件的方式,r只读,w可写
-读写文件
fs.write(fd, string[, position[, encoding]], callback)
fs.writeSync(fd, string[, position[, encoding]])
fs.read(fd, buffer, offset, length, position, callback)
fs.readSync(fd, buffer, offset, length, position)
-关闭文件
fs.close(fd,callback)
fs.closeSync(fd)
- 简单文件读取和写入
fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])
fs.readFile(path[, options], callback)
fs.readFileSync(path[, options])
- 流式文件读取和写入
- 流式读取和写入适用于一些比较大的文件
fs.createWriteStream(path[, options])
fs.createReadStream(path[, options])