node 内部对模块输出 module.exports 的实现
变量 module 是 Node 在加载 js 文件前准备的一个变量,并将其传入加载函数
1 | // 准备module对象 |
默认情况下,Node 准备的 exports 变量和 module.exports 变量实际上是同一个变量,所以一下两种写法都支持
1 | // method 1 |
process
下一轮事件循环 回调
1 | process.nextTick(function() { |
程序即将退出 回调
1 | process.on('exit', function(code) { |
readFile/readFileSync writeFile/writeFileSync stat
异步读取一个文本文件
1 | fs.readFile('./hello.js', 'utf-8', function (err, data) { |
异步读取一个二进制文件
1 | fs.readFile('1.jpg', function (err, data) { |
同步读取一个文件直接返回,读取错误用 try…catch 捕获
1 | try { |
异步写入一个文件,默认是以 UTF-8 编码写入文本文件
1 | var data = 'Hello,Node.js' |
同步写入文本到一个文件
1 | var data = 'Hello,Node.js,I am sync data' |
获取文件信息
1 | fs.stat('./1.jpg', function (err, stat) { |
PS:绝大部分需要在服务器运行期反复执行业务逻辑,必须使用异步代码服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时,可以使用同步代码
createReadStream createWriteStream pipe
在 node.js 中,流也是一个对象,我们只需要响应流的事件就可以了。
data 事件表示流的数据已经可以读取了,end 事件表示这个流已经到末尾了,没有数据可以读取了,error 事件表示出错。
1 | var rs = fs.createReadStream('./data.txt', 'utf-8') |
以流的形式写入文件,只需要不断调用 write()方法,最后以 end()结束
1 | var ws = fs.createWriteStream('./data.txt') |
pipe()把一个文件流和另一个文件流串起来,这样源文件的所有数据就自动写入到目标文件里
1 | var rs = fs.createReadStream('./data.txt') |
创建一个服务器
1 | var server = http.createServer(function (request, response) { |
实现一个文件服务器,拼接访问路径读取本地文件,从命令参数获取 root 目录,默认是当前目录
1 | var root = path.resolve('.') |
express 是第一代流行的 web 框架,它对 Node.js 的 HTTP 进行封装,语法基于 ES5,要实现异步代码,只有一个方法:回调。
koa2 完全基于 ES7 开发,使用 Promise 配合 async 实现异步
1 | // 创建一个Koa对象 |
概念
异步驱动特性,在主线程不被 CPU 密集型所影响时,可真正发挥出 Node.js 高并发特性,可以作为大部分网络 I/O 较高的后端服务。