1.1 后端nodejs核心模块 - OhNaNaSun/angularBlog GitHub Wiki
nodejs
1. path
path.normalize(p)
规范化字符串路径,注意 '..' 和 `'.' 部分
多个斜杠会被替换成一个; 路径末尾的斜杠会被保留; Windows 系统上, 会使用反斜杠。
实例:
path.normalize('/foo/bar//baz/asdf/quux/..')
// returns
'/foo/bar/baz/asdf'
path.join([path1], [path2], [...])
连接所有参数, 并且规范化得到的路径.
参数必须是字符串。在 v0.8 版本非字符串参数会被悄悄忽略。 在 v0.10 及以后版本将会抛出一个异常。
2. process:进程
process.env
:一个包括用户环境的对象。
process对象
process.exit()
:
用法
db.on('error', function(err){
console.error('connect to %s error: ', config.connectionstring, err.message);
process.exit(1);
});
process.nextTick(callback)
callback {Function}
在事件循环的下一次循环中调用 callback 回调函数。
这 **不是 setTimeout(fn, 0) 函数的一个简单别名,因为它的效率高多了。**该函数能在任何 I/O 事前之前调用我们的回调函数。但是这个函数在层次超过某个限制的时候,也会出现瑕疵。
3. http
http.createServer([requestListener])
返回一个新的web服务器对象: 是一个EventEmitter
实例
参数 requestListener 是一个函数,它将会自动加入到 'request' 事件的监听队列.
Class: http.Server: server.listen(port, [hostname], [backlog], [callback])
开始在指定的主机名和端口接收连接。如果省略主机名,服务器会接收指向任意IPv4地址的链接(INADDR_ANY)。
http.get(url, function(res){})
:发get请求,爬虫中有用到
`http.request()方法也用于发出HTTP请求
3.1 由http延伸 Buffer
传输的过程是Stream(流程),传的东西是Buffer.
编码方法:规定了符号的二进制代码的存储方式cnblog。 utf-8:以utf-8的方式将"a"存储为二进制。
JavaScript字符串是以UTF-8格式存储的,处理二进制的能力是很弱的。而网络层请求、响应、文件、图片都以二进制格式进行交互. 所以nodejs就提供了这样一个接口。创建了一个专门存放二进制数据的缓存区。并提供了一系列方法来处理这些数据(必然需要编码方式规定怎样存储这些数据). 一个 Buffer 实例类似于一个整数数组,但对应着 V8 堆之外的一个原始内存分配区域。 每个Buffer实例有自己的编码方法。我们实例化的时候设置的。Buffer实例可以转换为字符
.toString()
。字符串可以转换为buffer(带编码方式)。
数组方法基本都移植到了buffer上。
3.2 由http延伸 fs模块
读文件返回的data就是buffer
fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);//<Buffer XX XX>
});
3.3 由http延伸 Stream
流是一个抽象接口,被 Node 中的很多对象所实现。比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流。流是可读、可写或兼具两者的。所有流都是
EventEmitter
的实例。
http,fs,tcp...都用到了Stream 流以Buffer的形式存在,这样更高效。
- fs使用stream更精细地控制文件流
var fs = require("fs");
var readStream = fs.createReadStream("test.png");
var out = fs.createWriteStream("testwrite.png");
readStream
.on("data", function(chunk){
//防暴仓
if(!out.write(chunk)){
console.log("still cached");
readStream.pause()
}
})
.on("end", function(){
out.end();
})
out
.on("drain", function(){
console.log("data drains")
readStream.resume()
})
//fs.createReadStream("test.png").pipe(fs.createWriteStream("testPipe.png"));
- Stream模块
var Readable = require("stream").Readable;
var Writable = require("stream").Writable;
var readStream = new Readable();
var writeStream = new Writable();
readStream.push("I");
readStream.push("love");
readStream.push("imooc");
readStream.push(null);
writeStream._write = function(chunk, encode, cb){
console.log(chunk.toString());
cb();
}
readStream.pipe(writeStream);
3.4 http延伸 Net模块
net.createServer([options], [connectionListener])
创建一个新的 TCP 服务器(是一个EventEmitter
实例)。参数 connectionListener 会被自动作为 'connection' 事件的监听器。
3.5 http涉及 util模块
提供工具方法
util.isArray([])
util.inherits(constructor, superConstructor)
4. 全局对象(Global Object)
Node.js 全局对象
__dirname
__dirname 表示当前执行脚本所在的目录。
nodejs中路径的坑
参考: 浅析 NodeJs 的几种文件路径 只有在 require() 时才使用相对路径(./, ../)(相对于当前的这个文件) 的写法,其他地方一律使用绝对路径(是相对于启动脚本所在目录的路径),如下:
// 当前目录下
path.dirname(__filename) + '/test.js';
// 相邻目录下
path.resolve(__dirname, '../lib/common.js');
5. fs
参考: readdir(),readdirSync() readdir方法用于读取目录,返回一个所包含的文件和子目录的数组。
6. cryto
api
return crypto.createHash("md5").update(password).digest("base64");