模块——require/exports/module
var fs = require('fs');
var http = require('http'); //引用模块
module.exports = function(){} // 输出模块
文件拷贝
小文件拷贝
var fs = require('fs');
function copy(src, dst) {
fs.writeFileSync(dst, fs.readFileSync(src));
}
function main(argv) {
copy(argv[0], argv[1]);
}
main(process.argv.slice(2));
process是一个全局变量,可通过process.argv获得命令行参数。由于argv[0]固定等于nodejs执行程序的绝对路径,argv[1]固定等于主模块的绝对路径,因此第一个命令行参数从argv[2]这个位置开始。
大文件拷贝
var fs = require('fs');
function copy(src, dst) {
fs.createReadStream(src).pipe(fs.createWriteStream(dst));
}
function main(argv) {
copy(argv[0], argv[1]);
}
main(process.argv.slice[2]);
Buffer(数据块)
Buffer提供了对二进制数据的操作。
构造Buffer实例:
var bin = new Buffer([0x68, 0x6c, 0x6c, 0x6f]);
Buffer与字符串互相转化:
var str = bin.toString('utf-8'); // => "hello"
将字符串转换为指定编码下的二进制数据:
var bin = new Buffer('hello', 'utf-8'); // => <Buffer 68 65 6c 6c 6f>
Buffer与字符串的区别:
字符串是只读的,并且对字符串的任何修改得到的都是一个新的字符串,原字符串保持不变,至于Buffer,更像是可以做指针操作的c语言数组,改变的是指针的指向,如果修改的话,原Buffer也会被改动。
var bin = new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]);
var sub = bin.slice(2);
sub[0] = 0x65;
console.log(bin); // => <Buffer 68 65 6c 6f>
如果想拷贝一份Buffer,得首先创建一个新的Buffer,并通过.copy方法把原Buffer中的数据复制过去。
var bin = new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]);
var dup = new Buffer(bin.length);
bin.copy(dup);
dup[0] = 0x48;
console.log(bin); // => <Buffer 68 65 6c 6c 6f>
console.log(dup); // => <Buffer 48 65 6c 6c 6f>
Stream(数据流)
如果内存无法一次装下需要处理的数据时,就需要用到数据流,一边读取一边处理。
var rs = fs.createReadStream(pathname);
rs.on('data', function(chunk) {
rs.pause(); //在处理数据前暂停数据读取,并在处理数据后继续读取数据
dosomething(chunk);
});
rs.on('end', function() {
cleanUp();
});
为数据目标创建一个只写数据流,示例如下:
var rs = fs.createReadStream(pathname);
var ws = fs.createWriteStream(dst);
rs.on('data', function(chunk) {
if(ws.write(chunk) === false) { //写入速度跟不上读取速度时,只写数据流内部的缓存会爆仓,根据返回值判断传入的数据时写入目标了还是临时放在缓存了
rs.pause(); //如果是放入缓存,就暂停数据数据读取
}
});
rs.on('end', function() {
ws.end();
});
ws.on('drain', function() {
rs.resume();
});
File System(文件系统)
fs模块提供的api基本上可以分为三类:
文件属性读写
fs.stat、fs.chmod、fs.chown等文件内容读写
fs.readFile、fs.readdir、fs.writeFile、fs.mkdir等-
底层文件操作
fs.open、fs.read、fs.write、fs.close等
基本所有的fs模块api的回调参数都是两个
fs.readFile(pathname, function(err, data) {if(err) { //deal with error. }else { //deal with data. }
}); //异步IO模型
try {
var data = fs.readFileSync(pathname); //deal with data.
} catch (err) {
//deal with error.
}; //同步模型
Path(路径)
path.normalize(key) //将传入的路径转换成标准路径
path.join() //将传入的多个路径拼接为标准路径
-
path.extname //取得文件的扩展名
path.extname('foo/bar.js'); // => ".js"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。