Node.js 核心模块学习
Posted 一个XXX的分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js 核心模块学习相关的知识,希望对你有一定的参考价值。
核心模块(Core-Modules) 是 Node.js 中比较基础的内容,为 Node.js 提供了一些必要的模块。例如: fs 文件系统、path 路径、http 网络、assert 断言等等。
Node.js 出现很大程度的简化了后端开发,让前端攻城狮可以很容易的介入的后端的开发中。由于语言选择使用 javascript ,也因此你会发现作为一个前端开发人员非常容易上手 Node.js 。
核心模块
核心模块中除去3个http附属模块,一共大约30个js文件,此文章只讲解其中一些较为容易理解的部分。如有其他模块疑问,请读者参看 API 。 ps: 以下内容也是本人参考 API 进行了一些自己的理解和总结
console(控制台)
global(全局变量)
path(路径)
url
timer(定时器)
querystring(查询字符串)
util(实用工具)
assert
console
控制台输出是平时我们接触最多的部分,因为只要涉及到调试、查看信息等都会需要到控制台命令。 查看console的API文档不难发现,它的内部函数只有以下简单几个
log
info
warn
error
dir
time/timeEnd
trace
assert
log
控制台输出命令,基于 util.format
进行封装。 第一参数为主要输出信息,其他参数类似于 C 语言中 printf
的代替值。
// 控制台会输出: 这是一条输出信息
console.log('这是一条输出信息')
// 控制台会输出: 这是 1 条输出信息
console.log('这是 %d 条输出信息', 1)
info
如果查看官方文档给出的结论是,info
为 log
的别名 笔者在查看源代码时,获取了如下信息
// 将信息输输出到标准输出流 (stdout) 中
Console.prototype.log = function(...args) {
this._stdout.write(`${util.format.apply(null, args)}\n`);
};
// info函数等同于log函数
Console.prototype.info = Console.prototype.log;
结论, info
与 log
的使用方式相同
warn
控制台输出错误命令,基于 util.format
进行封装。 主要打印在 stderr
中
console.warn('warning')
error
如果查看官方文档给出的结论是,error
为 warn
的别名
console.error(new Error('错误信息'));
笔者在查看源代码时,获取了如下信息
// 将信息输输出到标准错误流 (stderr) 中
Console.prototype.warn = function(...args) {
this._stderr.write(`${util.format.apply(null, args)}\n`);
};
// warn函数等同于error函数
Console.prototype.error = Console.prototype.warn;
结论, error
与 warn
的使用方式相同
dir
dir
用于打印 Object
对象, 在 obj
上使用 util.inspect()
并打印结果字符串到控制台 该方法包含 2 个参数
obj
要输出的对象options
该选项为 JSON 对象showHidden 如果为
true
,则该对象中的不可枚举属性和symbol
属性也会显示。默认为false
depth 告诉
inspect
需要递归几层。对于检查大对象有很大帮助。默认为 2,如果想无线递归则使用null
colors 如果为
true
,则输出会带有 ANSI 颜色代码。 默认为false
。 以下为console.dir
的测试数据
var pro = [
{
"name": "北京",
"sub": [
{"name": "东城区"},
{"name": "西城区"},
{"name": "崇文区"},
{"name": "宣武区"},
{"name": "朝阳区"},
{"name": "海淀区"},
{"name": "丰台区"},
{"name": "石景山区"},
{"name": "房山区"},
{"name": "通州区"},
{"name": "顺义区"},
{"name": "昌平区"},
{"name": "大兴区"},
{"name": "怀柔区"},
{"name": "平谷区"},
{"name": "门头沟区"},
{"name": "密云县"},
{"name": "延庆县"},
{"name": "其他"}
],
"type": 0
}
]
console.dir(pro)
使用 node 执行该文件,得出以下结果 由上图可知, 默认情况下 Object 对象只能递归到 2 层。因此,可以修改如下参数。
var options = {
depth: null, // 使其无限递归
colors: true // 加上控制台颜色(默认)
}
console.dir(pro, options)
将代码修改为如上效果,重新执行 node 命令,效果如下图 结论,该方法用于打印复杂对象时效果显著
time/timeEnd
time
以及 timeEnd
是成对使用的方法。 原理: 当调用 time
时, 赋予 time
函数一个标识 label
,便会启动一个计时器,用于记录 time
- timeEnd
之间所消耗的时间;当调用 timeEnd
时,将会结束计时器,并将计时器的结果输出在控制台中。 作用: 用于查看代码的执行时间,便于对代码进行优化 注意: label 部分所填入的值,需要一致 使用方式如下:
console.time('time')
for (var i = 0; i < 1000000; i++) { }
console.timeEnd('time')
执行结果如下图:
trace
作用: 用于打印当前调用栈信息,Trace:
被输出到 stderr
中 堆栈跟踪会根据被调用的跟踪的位置变化而变化
console.trace('当前栈信息')
执行后,如下图
assert
断言, 将 Core-Modules
中的 assert
封装后,可以便于开发者快速使用断言。 具体代码实现如下:
Console.prototype.assert = function(expression, ...args) {
if (!expression) {
// 引入 assert 模块,并使用 ok 函数
require('assert').ok(false, util.format.apply(null, args));
}
};
断言在很多编程语言中都有,因此,如果有其他语言的基础上手非常快。 此处的断言与浏览器中的断言不同,浏览器中不会终止后续操作,但 Node.js 中的断言,会终止后续所有操作。 参数:
expression 类型为
boolean
,为true
时,执行后续操作; 为false
时,终止后续操作,并抛出AssertionError
message Error的说明信息
console.assert(false, '此处有异常')
console.log('这个log不会执行')
执行结果如下:
global
global 即为 Node.js 的全局对象,类似于浏览器中的 window 对象。global内部包含以下几个内容
__dirname
__filename
module
require
exports
Buffer 类
console
process
setImmediate/clearInterval
setInterval/clearInterval
setTimeout/clearTimeout
以上是关于Node.js 核心模块学习的主要内容,如果未能解决你的问题,请参考以下文章