Node.js
1.简介
- http://nodejs.cn/
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。
2.npm部分常用命令
- npm -v 查询npm的版本
- npm -version 查看所有模块的版本
- npm search +包名 搜索包
- npm install/i +包名 安装包
- npm remove/r +包名 删除包
- npm install/i +包名 --save 安装包并添加到依赖中
- npm install 下载当前项目所依赖的包
- npm install +包名 -g 全局安装包(全局安装的包一般都是一些工具)
通过npm下载的包都放到node_modules文件中,通过npm下载的包,直接通过包名引入即可
3.配置cnpm
可以使用定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm --registry=https://registry.npmmirror.com
4.Buffer(缓冲区)
- Buffer的结构和数组很像,操作的方法也和数组类似,它的元素为16进制的两位数.
- 一个元素就表示内存中的一个字节.
- Buffer中的内存不是通过JavaScript分配的,而是在底层通过C++申请的.
- 也就是我们可以直接通过Buffer来创建内存中的空间.
- 数组中不能存储二进制的文件,而buffer就是专门用来存储二进制数据
- 使用Buffer不需要引入模块,直接使用即可.
- Buffer所有构造函数都是不推荐使用的.
- Buffer的大小一旦确定,则不能修改,Buffer实际上是对底层内存的操纵
5.文件系统(File System)
- 文件系统简单来说就是通过Node来操作系统中的文件
- 使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载
5.1同步和异步调用
- fs模块中所有的操作都有两种形式可供选择:同步和异步
- 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码.
- 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回.
5.1.1同步文件的写入:
手动操作的步骤:
- 打开文件
fs.openSync(path, flags[, mode])
- path 要打开文件的路径
- flags 打开文件要做的操作的类型:
r 只读的
w 可写的 - mode 设置文件的操作权限,一般不传(参)
- 向文件写入内容
fs.writeSync(fd, string[, position[, encoding]])
- fd 文件的一个描述符,需要传递要写入的文件的描述符
- string 要写入的内容
- position 写入的起始位置
- encoding 写入的编码 默认UTF-8
- 保存并关闭文件
fs.closeSync(fd)
- fd 要关闭的文件的描述符(哪个文件 )
5.1.2异步文件的写入
- 打开文件
fs.open(path[, flags[, mode]], callback)
- 用来打开一个文件
- 异步调用的方法,结果都是通过回调函数的参数返回的
- 回调函数两个参数:
err 错误对象,如果没有错误则为null
fd 文件描述符
- 向文件写入内容
fs.writeSync(fd, string[, position[, encoding]],callback)
- 用来异步写入一个文件
- 保存并关闭文件
fs.close(fd,callback)
5.2简单文件写入
常用的:(读:r,写:W,追加:a)
- 打开状态
- 范例:
5.3流式文件写入
同步-异步-简单文件的写入都不适合大文件的写入,性能较差,容易造成内存溢出.
5.4简单文件读取与流式文件读取
- 简单读取:
- 流式读取:
以上内容真正写项目时反而不使用,这些东西都是服务器或框架底层使用的.
5.5 fs其他模块
- 使用范例代码: