Node.js 全局对象

  • 全局对象

    Node.js全局对象本质上是全局的,并且在所有模块中都可用。我们不需要在应用程序中包含这些对象,而是可以直接使用它们。这些对象是模块,函数,字符串和对象本身,如下所述。
    __filename
    __filename表示正在执行的代码的文件名。这是此代码文件的解析绝对路径。对于主程序,它不必与命令行中使用的文件名相同。模块内部的值是该模块文件的路径。
    
    console.log( __filename );
    
    尝试一下
    __dirname
    __dirname表示当前正在执行的脚本所在的目录的名称。
    
    console.log( __dirname);
    
    尝试一下
  • setTimeout(cb,ms)

    setTimeout(cb,ms)全局函数用来运行至少毫秒毫秒后回调cb。实际延迟取决于外部因素,例如OS计时器粒度和系统负载。计时器的时间不能超过24.8天。此函数返回代表计时器的不透明值,可用于清除计时器。
    创建一个名为input.txt的文本文件,其内容如下:
    
    function printHello() {
       console.log( "Hello, World!");
    }
    
    // 从现在开始两秒后调用printHello函数
    setTimeout(printHello, 2000);
    
    尝试一下
  • clearTimeout(t)

    clearTimeout(t)全局函数用于停止以前用的setTimeout创建的计时器()。这里t是setTimeout()函数返回的计时器。
    使用以下代码创建一个名为main.js的js文件-
    
    function printHello() {
       console.log( "Hello, World!");
    }
    
    // 两秒后调用printHello函数
    var t = setTimeout(printHello, 2000);
    
    // 现在清除定时器
    clearTimeout(t);
    
    现在运行main.js以查看结果-
    
    $ node main.js
    
    验证输出,您将找不到打印的任何内容。
  • setInterval(cb,ms)

    setInterval(cb,ms)全局函数是用来至少毫秒毫秒后重复运行回调cb。实际延迟取决于外部因素,例如OS计时器粒度和系统负载。计时器的时间不能超过24.8天。此函数返回代表计时器的不透明值,可使用函数clearInterval(t)清除计时器。
    使用以下代码创建一个名为main.js的js文件-
    
    function printHello() {
       console.log( "Hello, World!");
    }
    
    // 现在2秒后调用上面的函数
    setInterval(printHello, 2000);
    
    上面的程序每2秒执行一次printHello()。由系统限制。
  • 其他全局对象

    下表提供了我们在应用程序中经常使用的其他对象的列表。有关更多详细信息,请参阅官方文档。
    对象 说明
    console 用于在stdout和stderr上打印信息。
    process 用于获取有关当前进程的信息。提供与流程活动相关的多个事件。
    console对象
    console是一个全局对象,用于将不同级别的消息打印到stdout和stderr。有内置方法可用于打印参考性消息,警告和错误消息。如果目标是文件或终端,则以同步方式使用;如果目标是管道,则以异步方式使用。
    以下是console全局对象可用的方法列表。
    方法 说明
    console.log([data][, ...]) 用换行符打印到标准输出。 该函数可以采用类似于printf()的方式接受多个参数。
    console.info([data][, ...]) 用换行符打印到标准输出。 该函数可以采用类似于printf()的方式接受多个参数。
    console.error([data][, ...]) 用换行符打印到stderr。 该函数可以采用类似于printf()的方式接受多个参数。
    console.warn([data][, ...]) 用换行符打印到stderr。 该函数可以采用类似于printf()的方式接受多个参数
    console.dir(obj[, options]) 在obj上使用util.inspect并将结果字符串输出到stdout。
    console.time(label) 标记时间。
    console.timeEnd(label) 完成计时器,记录输出。
    console.trace(message[, ...]) 打印到stderr'Trace:',然后打印格式化的消息并将堆栈跟踪到当前位置。
    console.assert(value[, message][, ...]) 与assert.ok类似,但错误消息的格式为util.format(message ...)。
    让我们用以下代码创建一个名为main.js的js文件-
    
    console.info("程序开始");
    
    var counter = 10;
    console.log("计数: %d", counter);
    
    console.time("获取数据");
    //
    // 一些过程在这里
    // 
    console.timeEnd('获取数据');
    
    console.info("程序结束")
    
    尝试一下
    输出:
    
    程序开始
    计数: 10
    获取数据: 0.134ms
    程序结束
    
    process对象
    process对象是一个全局对象,可以从任何地方访问。过程对象中有几种可用的方法。
    process对象是EventEmitter的实例,并发出以下事件-
    事件 说明
    exit 在进程即将退出时发出。 此时无法阻止事件循环的退出,并且一旦所有退出侦听器完成运行,该过程就会退出。
    beforeExit 当节点清空其事件循环且没有其他可安排的时间时,将发出此事件。 通常,当没有安排工作时,节点会退出,但是“ beforeExit”的侦听器可以进行异步调用,并导致节点继续。
    uncaughtException 当异常一直冒泡回到事件循环时发出。 如果为此异常添加了侦听器,则不会发生默认操作(即打印堆栈跟踪并退出)。
    Signal Events 当进程接收到诸如SIGINT,SIGHUP等信号时发出。
    让我们用以下代码创建一个名为main.js的js文件-
    
    process.on('exit', function(code) {
       setTimeout(function() {
          console.log("这里不会执行");
       }, 0);
      
       console.log('退出码:', code);
    });
    console.log("程序结束");
    
    尝试一下
    输出:
    
    程序结束
    退出码: 0
    
    退出码
    当没有其他异步操作挂起时,Node通常以0状态代码退出。还有其他退出代码,如下所述-
    名称 说明
    Uncaught Fatal Exception 存在一个未捕获的异常,该异常未由域或uncaughtException事件处理程序处理。
    Unused 由Bash保留,用于内置滥用。
    Internal JavaScript Parse Error Node引导过程中的内部JavaScript源代码导致解析错误。这种情况极为罕见,通常只能在Node本身的开发过程中发生。
    Internal JavaScript Evaluation Failure Node的自举过程中的内部JavaScript源代码在评估时无法返回函数值。这种情况极为罕见,通常只能在Node本身的开发过程中发生。
    Fatal Error V8中存在致命的不可恢复的错误。通常,将使用前缀FATAL ERROR将消息打印到stderr。
    Non-function Internal Exception Handler 发生了未捕获的异常,但是内部致命异常处理程序函数以某种方式设置为非函数,因此无法调用。
    Internal Exception Handler Run-Time Failure 发生了未捕获的异常,并且内部致命异常处理程序函数本身在尝试处理该错误时引发了错误。
    Unused 未使用
    Invalid Argument ERROR将消息打印到stderr。指定了未知选项,或者提供了需要值的选项而没有值。
    Internal JavaScript Run-Time Failure Node的引导过程中的内部JavaScript源代码在调用引导函数时引发错误。这种情况极为罕见,通常只能在Node本身的开发过程中发生。
    Invalid Debug Argument 设置了--debug和/或--debug-brk选项,但是选择了无效的端口号。
    Signal Exits 如果Node收到诸如SIGKILL或SIGHUP之类的致命信号,则其退出代码将为128加信号代码的值。 这是标准的Unix惯例,因为退出代码定义为7位整数,并且信号出口将高位设置为1,然后包含信号代码的值。
  • process属性

    >process提供了许多有用的属性,可以更好地控制系统交互。
    属性 说明
    stdout 到标准输出的可写流。
    stderr 到stderr的可写流。
    stdin 到stdin的可写流。
    argv 包含命令行参数的数组。第一个元素是'node',第二个元素是JavaScript文件的名称。接下来的元素将是任何其他命令行参数。
    execPath 这是启动进程的可执行文件的绝对路径名。
    execArgv 这是启动过程的可执行文件中特定于节点的命令行选项的集合。
    env 包含用户环境的对象。
    exitCode 一个数字,该数字将是进程正常退出或通过process.exit()退出而未指定代码的退出代码。
    version 公开NODE_VERSION的已编译属性。
    versions 公开节点及其依赖项的版本字符串的属性。
    config 一个对象,其中包含用于编译当前节点可执行文件的configure选项的JavaScript表示形式。这与运行./configure脚本时生成的“ config.gypi”文件相同。
    pid 进程的PID。
    title Getter / setter设置“ ps”中显示的内容。
    arch 您正在运行哪种处理器体系结构:“arm”,“ia32”或“x64”。
    platform 您在哪个平台上运行:“darwin”,“freebsd”,“ linux”,“ sunos”或“ win32”
    mainModule 检索require.main的替代方法。区别在于,如果主模块在运行时发生更改,则require.main仍可能引用更改发生之前所需模块中的原始主模块。通常,可以安全地假定两者都引用相同的模块。
    让我们用以下代码创建一个名为main.js的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);
    
    尝试一下
    输出:
    
    Hello World!
    0: /usr/local/bin/node
    1: /var/www/nodejs/Tmp5f1fef04debaf1595928324.js
    /usr/local/bin/node
    linux
    
  • process方法参考

    >process提供了许多有用的方法来更好地控制系统交互。
    方法 说明
    abort() 它导致节点发出异常终止。它导致节点退出并生成核心文件。
    chdir(directory) 更改进程的当前工作目录,或者如果失败则抛出异常。
    cwd() 返回进程的当前工作目录。
    exit([code]) 用指定的代码结束进程。如果省略,则退出使用“成功”代码0。
    getgid() 获取流程的组标识。这是数字组ID,而不是组名称。此功能仅在POSIX平台上可用(即Windows,Android不可用)。
    setgid(id) 设置进程的组标识。 (请参阅setgid(2))。它接受数字ID或组名字符串。如果指定了组名,则此方法在将其解析为数字ID时将被阻止。此功能仅在POSIX平台上可用(即Windows,Android除外)。
    getuid() 获取流程的用户身份。这是数字ID,而不是用户名。此功能仅在POSIX平台上可用(即Windows,Android不可用)。
    setuid(id) 设置进程的用户身份(请参阅setgid(2))。它接受数字ID或用户名字符串。如果指定了用户名,则此方法将在解析为数字ID时被阻止,此功能仅在POSIX平台上可用(即Windows,Android不可用)。
    getgroups() 返回具有补充组ID的数组。如果包含有效的组ID,则POSIX会使其保持不确定状态,但是node.js会确保始终存在。此功能仅在POSIX平台(即Windows,Android)上不可用。
    setgroups(groups) 设置补充组ID。这是一项特权操作,这意味着您必须是根用户或具有CAP_SETGID功能。此功能仅在POSIX平台(即Windows,Android)上不可用。
    initgroups(user, extra_group) 使用用户所属的所有组读取/ etc / group并初始化组访问列表。这是一项特权操作,这意味着您必须是根用户或具有CAP_SETGID功能。此功能仅在POSIX平台(即Windows,Android)上不可用。
    kill(pid[, signal]) 向过程发送信号。 pid是进程ID,而signal是描述要发送的信号的字符串。信号名称是类似于“ SIGINT”或“ SIGHUP”的字符串。如果省略,则信号为“ SIGTERM”。
    memoryUsage() 返回一个对象,该对象描述以字节为单位的Node进程的内存使用情况。
    nextTick(callback) 当前事件循环完成后,请调用回调函数。
    umask([mask]) 设置或读取进程的文件模式创建掩码。子进程从父进程继承掩码。如果给出了mask参数,则返回旧的mask,否则返回当前的mask。
    uptime() 节点已运行的秒数。
    hrtime() 以[秒,纳秒]元组数组形式返回当前的高分辨率实时数据。这是相对于过去的任意时间。它与一天中的时间无关,因此不受时钟漂移的影响。主要用途是测量间隔之间的性能。
    让我们用以下代码创建一个名为main.js的js文件-
    
    // 打印当前文件夹
    console.log('当前文件夹: ' + process.cwd());
    
    // Print the process version
    console.log('当前版本: ' + process.version);
    
    // 内存使用
    console.log(process.memoryUsage());
    
    尝试一下
    输出:
    
    当前文件夹: /var/www/nodejs
    当前版本: v14.5.0
    {
    rss: 15462400,
    heapTotal: 4677632,
    heapUsed: 2732896,
    external: 942763,
    arrayBuffers: 9382
    }