Node.js 全局工具
Node.js 全局工具
JavaScript 中有一个非凡的工具,称为全局工具(Global Object),它及其所有属性都可以在措施的任那里所会见,即全局变量。
在欣赏器 JavaScript 中,凡是 window 是全局工具,
而 Node.js 中的全局工具是 global,所有全局变量(除了 global 自己以外)都是 global
工具的属性。
在 Node.js 我们可以直接会见到 global 的属性,而不需要在应用中包括它。
全局工具与全局变量
global 最基础的浸染是作为全局变量的宿主。凭据 ECMAScript 的界说,满意以下条
件的变量是全局变量:
当你界说一个全局变量时,这个变量同时也会成为全局工具的属性,反之亦然。需要注
意的是,在 Node.js 中你不行能在最外层界说变量,因为所有用户代码都是属于当前模块的,
而模块自己不是最外层上下文。
留意:
永远利用 var 界说变量以制止引入全局变量,因为全局变量会污染
定名空间,提高代码的耦合风险。
__filename
__filename 暗示当前正在执行的剧本的文件名。它将输出文件地址位置的绝对路径,且和呼吁行参数所指定的文件名不必然沟通。
假如在模块中,返回的值是模块文件的路径。
实例
建设文件 main.js ,代码如下所示:
// 输出全局变量 __filename 的值 console.log( __filename );
执行 main.js 文件,代码如下所示:
$ node main.js /web/com/runoob/nodejs/main.js
__dirname
__dirname 暗示当前执行剧内地址的目次。
实例
建设文件 main.js ,代码如下所示:
// 输出全局变量 __dirname 的值 console.log( __dirname );
执行 main.js 文件,代码如下所示:
$ node main.js /web/com/runoob/nodejs
setTimeout(cb, ms)
setTimeout(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。:setTimeout() 只执行一次指定函数。
返回一个代表按时器的句柄值。
实例
建设文件 main.js ,代码如下所示:
function printHello(){ console.log( "Hello, World!"); } // 两秒后执行以上函数 setTimeout(printHello, 2000);
执行 main.js 文件,代码如下所示:
$ node main.js Hello, World!
clearTimeout(t)
clearTimeout( t ) 全局函数用于遏制一个之前通过 setTimeout() 建设的按时器。 参数 t 是通过 setTimeout() 函数建设的按时器。
实例
建设文件 main.js ,代码如下所示:
function printHello(){ console.log( "Hello, World!"); } // 两秒后执行以上函数 var t = setTimeout(printHello, 2000); // 排除按时器 clearTimeout(t);
执行 main.js 文件,代码如下所示:
$ node main.js
setInterval(cb, ms)
setInterval(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。
返回一个代表按时器的句柄值。可以利用 clearInterval(t) 函数来排除按时器。
setInterval() 要了解不断地挪用函数,直到 clearInterval() 被挪用或窗口被封锁。
实例
建设文件 main.js ,代码如下所示:
function printHello(){ console.log( "Hello, World!"); } // 两秒后执行以上函数 setInterval(printHello, 2000);
执行 main.js 文件,代码如下所示:
$ node main.js
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
……
以上措施每隔两秒就会输出一次”Hello, World!”,且会永久执行下去,直到你按下 ctrl + c 按钮。
console
console 用于提供节制台尺度输出,它是由 Internet Explorer 的 JScript 引擎提供的调试东西,厥后逐渐成为欣赏器的实施尺度。
Node.js 沿用了这个尺度,提供与习惯行为一致的 console 工具,用于向尺度输出流(stdout)或尺度错误流(stderr)输出字符。
console 要领
以下为 console 工具的要领:
序号 | 要领 & 描写 |
---|---|
1 |
console.log([data][, …]) 向尺度输出流打印字符并以换行符竣事。该要领吸收若干 个参数,假如只有一个参数,则输出这个参数的字符串形式。假如有多个参数,则 以雷同于C 语言 printf() 呼吁的名目输出。 |
2 |
console.info([data][, …]) 该呼吁的浸染是返复书息性动静,这个呼吁与console.log不同并不大,除了在chrome中只会输出文字外,其余的会显示一个蓝色的赞叹号。 |
3 |
console.error([data][, …]) 输堕落误动静的。节制台在呈现错误时会显示是赤色的叉子。 |
4 |
console.warn([data][, …]) 输出告诫动静。节制台呈现有黄色的赞叹号。 |
5 |
console.dir(obj[, options]) 用来对一个工具举办查抄(inspect),并以易于阅读和打印的名目显示。 |
6 |
console.time(label) 输出时间,暗示计时开始。 |
7 |
console.timeEnd(label) 竣事时间,暗示计时竣事。 |
8 |
console.trace(message[, …]) 当前执行的代码在仓库中的挪用路径,这个测试函数运行很有辅佐,只要给想测试的函数内里插手 console.trace 就行了。 |
9 |
console.assert(value[, message][, …]) 用于判定某个表达式或变量是否为真,吸收两个参数,第一个参数是表达式,第二个参数是字符串。只有当第一个参数为false,才会输出第二个参数,不然不会有任何功效。 |
console.log():向尺度输出流打印字符并以换行符竣事。
console.log 吸收若干
个参数,假如只有一个参数,则输出这个参数的字符串形式。假如有多个参数,则
以雷同于C 语言 printf() 呼吁的名目输出。
#p#分页标题#e#
第一个参数是一个字符串,假如没有
参数,只打印一个换行。
console.log('Hello world'); console.log('byvoid%diovyb'); console.log('byvoid%diovyb', 1991);
运行功效为:
Hello world byvoid%diovyb byvoid1991iovyb
console.trace();
运行功效为:
Trace: at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)
实例
建设文件 main.js ,代码如下所示:
console.info("措施开始执行:"); var counter = 10; console.log("计数: %d", counter); console.time("获取数据"); // // 执行一些代码 // console.timeEnd('获取数据'); console.info("措施执行完毕。")
执行 main.js 文件,代码如下所示:
$ node main.js 措施开始执行: 计数: 10 获取数据: 0ms 措施执行完毕
process
process 是一个全局变量,即 global 工具的属性。
它用于描写当前Node.js 历程状态的工具,提供了一个与操纵系统的简朴接口。凡是在你写当地呼吁行措施的时候,少不了要 和它打交道。下面将会先容 process 工具的一些最常用的成员要领。
序号 | 事件 & 描写 |
---|---|
1 |
exit 当历程筹备退出时触发。 |
2 |
beforeExit 当 node 清空事件轮回,而且没有其他布置时触发这个事件。凡是来说,当没有历程布置时 node 退出,可是 ‘beforeExit’ 的监听器可以异法式用,这样 node 就会继承执行。 |
3 |
uncaughtException 当一个异常冒泡回到事件轮回,触发这个事件。假如给异常添加了监督器,默认的操纵(打印仓库跟踪信息并退出)就不会产生。 |
4 |
Signal 事件 当历程吸收到信号时就触发。信号列表详见尺度的 POSIX 信号名,如 SIGINT、SIGUSR1 等。 |
实例
建设文件 main.js ,代码如下所示:
process.on('exit', function(code) { // 以下代码永远不会执行 setTimeout(function() { console.log("该代码不会执行"); }, 0); console.log('退出码为:', code); }); console.log("措施执行竣事");
执行 main.js 文件,代码如下所示:
$ node main.js 措施执行竣事 退出码为: 0
退出状态码
状态码 | 名称 & 描写 |
---|---|
1 |
Uncaught Fatal Exception 有未捕捉异常,而且没有被域或 uncaughtException 处理惩罚函数处理惩罚。 |
2 |
Unused 保存 |
3 |
Internal JavaScript Parse Error JavaScript的源码启动 Node 历程时引起理会错误。很是稀有,仅会在开拓 Node 时才会有。 |
4 |
Internal JavaScript Evaluation Failure JavaScript 的源码启动 Node 历程,评估时返回函数失败。很是稀有,仅会在开拓 Node 时才会有。 |
5 |
Fatal Error V8 里致命的不行规复的错误。凡是会打印到 stderr ,内容为: FATAL ERROR |
6 |
Non-function Internal Exception Handler 未捕捉异常,内部异常处理惩罚函数不知为何配置为on-function,而且不能被挪用。 |
7 |
Internal Exception Handler Run-Time Failure 未捕捉的异常, 而且异常处理惩罚函数处理惩罚时本身抛出了异常。譬喻,假如 process.on(‘uncaughtException’) 或 domain.on(‘error’) 抛出了异常。 |
8 |
Unused 保存 |
9 |
Invalid Argument 大概是给了未知的参数,可能给的参数没有值。 |
10 |
Internal JavaScript Run-Time Failure JavaScript的源码启动 Node 历程时抛堕落误,很是稀有,仅会在开拓 Node 时才会有。 |
12 |
Invalid Debug Argument 配置了参数–debug 和/或 –debug-brk,可是选择了错误端口。 |
128 |
Signal Exits 假如 Node 吸收到致命信号,好比SIGKILL 或 SIGHUP,那么退出代码就是128 加信号代码。这是尺度的 Unix 做法,退出信号代码放在高位。 |
Process 属性
#p#分页标题#e#
Process 提供了许多有用的属性,便于我们更好的节制系统的交互:
序号. | 属性 & 描写 |
---|---|
1 |
stdout 尺度输出流。 |
2 |
stderr 尺度错误流。 |
3 |
stdin 尺度输入流。 |
4 |
argv argv 属性返回一个数组,由呼吁行执行剧本时的各个参数构成。它的第一个成员老是node,第二个成员是剧本文件名,其余成员是剧本文件的参数。 |
5 |
execPath 返回执行当前剧本的 Node 二进制文件的绝对路径。 |
6 |
execArgv 返回一个数组,成员是呼吁行下执行剧本时,在Node可执行文件与剧本文件之间的呼吁行参数。 |
7 |
env 返回一个工具,成员为当前 shell 的情况变量 |
8 |
exitCode 历程退出时的代码,假如历程优通过 process.exit() 退出,不需要指定退出码。 |
9 |
version Node 的版本,好比v0.10.18。 |
10 |
versions 一个属性,包括了 node 的版本和依赖. |
11 |
config 一个包括用来编译当前 node 执行文件的 javascript 设置选项的工具。它与运行 ./configure 剧本生成的 “config.gypi” 文件沟通。 |
12 |
pid 当前历程的历程号。 |
13 |
title 历程名,默认值为”node”,可以自界说该值。 |
14 |
arch 当前 CPU 的架构:’arm’、’ia32′ 可能 ‘x64’。 |
15 |
platform 运行措施地址的平台系统 ‘darwin’, ‘freebsd’, ‘linux’, ‘sunos’ 或 ‘win32’ |
16 |
mainModule require.main 的备选要领。差异点,假如主模块在运行时改变,require.main大概会继承返回老的模块。可以认为,这两者引用了同一个模块。 |
实例
建设文件 main.js ,代码如下所示:
// 输出到终端 process.stdout.write("Hello World!" + "\n"); // 通过参数读取 process.argv.forEach(function(val, index, array) { console.log(index + ': ' + val); }); // 获取执行路径 console.log(process.execPath); // 平台信息 console.log(process.platform);
执行 main.js 文件,代码如下所示:
$ node main.js Hello World! 0: node 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwin
要领参考手册
Process 提供了许多有用的要领,便于我们更好的节制系统的交互:
序号 | 要领 & 描写 |
---|---|
1 |
abort() 这将导致 node 触发 abort 事件。会让 node 退出并生成一个焦点文件。 |
2 |
chdir(directory) 改变当前事情历程的目次,假如操纵失败抛出异常。 |
3 |
cwd() 返回当前历程的事情目次 |
4 |
exit([code]) 利用指定的 code 竣事历程。假如忽略,将会利用 code 0。 |
5 |
getgid() 获取历程的群组标识(拜见 getgid(2))。获取到得时群组的数字 id,而不是名字。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
6 |
setgid(id) 配置历程的群组标识(拜见 setgid(2))。可以吸收数字 ID 可能群组名。假如指定了群组名,会阻塞期待理会为数字 ID 。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
7 |
getuid() 获取历程的用户标识(拜见 getuid(2))。这是数字的用户 id,不是用户名。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
8 |
setuid(id) 配置历程的用户标识(拜见setuid(2))。吸收数字 ID或字符串名字。果指定了群组名,会阻塞期待理会为数字 ID 。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
9 |
getgroups() 返回历程的群组 iD 数组。POSIX 系统没有担保必然有,可是 node.js 担保有。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
10 |
setgroups(groups) 配置历程的群组 ID。这是授权操纵,所有你需要有 root 权限,可能有 CAP_SETGID 本领。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
11 |
initgroups(user, extra_group) 读取 /etc/group ,并初始化群组会见列表,利用成员地址的所有群组。这是授权操纵,所有你需要有 root 权限,可能有 CAP_SETGID 本领。 留意:这个函数仅在 POSIX 平台上可用(譬喻,非Windows 和 Android)。 |
12 |
kill(pid[, signal]) 发送信号给历程. pid 是历程id,而且 signal 是发送的信号的字符串描写。信号名是字符串,好比 ‘SIGINT’ 或 ‘SIGHUP’。假如忽略,信号会是 ‘SIGTERM’。 |
13 |
memoryUsage() 返回一个工具,描写了 Node 历程所用的内存状况,单元为字节。 |
14 |
nextTick(callback) 一旦当前事件轮回竣事,挪用回到函数。 |
15 |
umask([mask]) 配置或读取历程文件的掩码。子历程从父历程担任掩码。假如mask 参数有效,返回旧的掩码。不然,返回当前掩码。 |
16 |
uptime() 返回 Node 已经运行的秒数。 |
17 |
hrtime() 返回当前历程的高判别时间,形式为 [seconds, nanoseconds]数组。它是相对付已往的任意事件。该值与日期无关,因此不受时钟漂移的影响。主要用途是可以通过准确的时距离断,来权衡措施的机能。 你可以将之前的功效通报给当前的 process.hrtime() ,会返回两者间的时间差,用来基准和丈量时距离断。 |
实例
#p#分页标题#e#
建设文件 main.js ,代码如下所示:
// 输出当前目次 console.log('当前目次: ' + process.cwd()); // 输出当前版本 console.log('当前版本: ' + process.version); // 输出内存利用环境 console.log(process.memoryUsage());
执行 main.js 文件,代码如下所示:
$ node main.js 当前目次: /web/com/runoob/nodejs 当前版本: v0.10.36 { rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }