Node 基础
浏览器工作原理(Node优势):事件驱动(事件轮询)和非阻塞IO处理(异步IO)
传统服务器是同步IO操作,采用线程方式处理多并发服务,线程会消耗额外的系统资源。
Node 构建简单的异步程序
var fs = require("fs");
fs.readFile("./resurce.json", function(err, data) {
console.log(data);
});
这里的fs是node自带的模块,用于读取硬盘文件。node风格,优先处理错误,所以回调的第一个参数是err。
Node 构建 HTTP 服务器
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000);
console.log("服务器运行在:http://localhost:3000");
数据流
可以把数据流看成是特殊的数组,只不过数组中的数据分散在空间上,而数据流中的数据是分散在时间上的。通过将数据一块一块的传送,开发人员可以每收到一块数据就开始处理,而不用等到数据都到了再做处理。(节省内存)
var steam = fs.createReadStream('./resource.json');
//当有新的数据准备好时候就会触发data事件
stream.on('data', function (chunk) {
console.log(chunk)
});
//事件结束
stream.on('end', function () {
console.log('finished');
})
管道
可以通过pipe()
管道处理数据流动。
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
//指定一个从读取流到写出流的管道
fs.createReadStream('./image/png').pipe(res);
}).listen(3000);
console.log("服务器运行在:http://localhost:3000");
模块
创建模块
如果模块是一个目录,Node通常会在这个目录下面找一个叫做index.js的文件作为模块的入口
exports = module.exports
导出模块
exports.fun=fun
使用模块
require(./fun.js)
异步
on():响应事件
once():响应一次事件
emit():发射事件