NodejsAPI学习

588 阅读2分钟

Nodejs中的常用的模块

process

process 对象是一个全局变量,提供对 nodejs 进程的相关信息与控制接口。

常用属性

  • argv => String[]

    nodejs 启动时传入的命令行参数,第一个参数 process.execPath/process.argv0 , 即node服务的启动执行路径;第二个元素将是正在执行的 JavaScript 文件的路径。其余元素将是任何其他命令行参数。

    执行命令node node.js 1 '2=3' 3 4

    // node.js
    process.argv.forEach((item, index) => {
      console.log(`${index}: ${item}`);
    });
    // 0: /Users/dyh/.nvm/versions/node/v10.13.0/bin/node
    // 1: /Users/dyh/WebstormProjects/node-practice/nodedemo/node.js
    // 2: 1
    // 3: 2=3
    // 4: 3
    // 5: 4
    
  • arch => String

    返回一个表示操作系统CPU架构的字符串。

    e.g: 'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', 或 'x64'

  • chdir(String dir) => void

    process.chdir()方法变更Node.js进程的当前工作目录,如果变更目录失败会抛出异常(例如,如果指定的目录不存在)

    console.log(`当前目录: ${process.cwd()}`);
    try {
      process.chdir('/tmp');
      console.log(`更改后目录: ${process.cwd()}`);
    } catch (err) {
      console.error(`错误信息: ${err}`);
    }
    
  • cwd() => String

    返回 Node.js 进程的当前工作目录 '/Users/dyh/WebstormProjects/node-practice/nodedemo'

  • env => Object

    返回当前用户的环境对象,可修改如: process.env.BROWSER = true

    {
      TERM: 'xterm-256color',
      SHELL: '/usr/local/bin/bash', // bash所在位置
      USER: 'maciej', // 用户名
      PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', // 环境变量
      PWD: '/Users/maciej',
      EDITOR: 'vim',
      SHLVL: '1',
      HOME: '/Users/maciej',  // 用户目录
      LOGNAME: 'maciej',
      _: '/usr/local/bin/node'
    }
    
  • exit(Integer code) => void

    强制退出当前 nodejs 进程,即使还有尚未完全完成的异步操作,包括对 process.stdoutprocess.stderrI/O 操作,退出码为 code , 默认为0

    // 如何正确设置退出码,同时让进程正常退出。
    if (someConditionNotMet()) {
      printUsageToStdout();
      // 此处设置退出码而不直接调用exit()方法,是为了让进程正常退出,而不是强制退出
      process.exitCode = 1; 
    }
    
  • hrtime(Array<Integer> time) => Array<Integer> = [seconds, nanoseconds]

    返回当前时间以[seconds, nanoseconds] tuple Array表示的高精度解析值, nanoseconds是当前时间无法使用秒的精度表示的剩余部分, time 是上一次调用process.hrtime()的结果,给此参数传入一个用户定义的数组,而不是传入上次调用process.hrtime()的结果,会导致未定义的行为;

    process.hrtime()返回的时间,都是相对于过去某一时刻的值,与一天中的时钟时间没有关系,因此不受制于时钟偏差。 此方法最主要的作用是衡量间隔操作的性能。

    const NS_PER_SEC = 1e9;
    const time = process.hrtime();
    // [ 1800216, 25 ]
    
    setTimeout(() => {
      const diff = process.hrtime(time);
      // [ 1, 552 ]
    
      console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
      // benchmark took 1000000552 nanoseconds
    }, 1000);
    
  • memoryUsage() => Object

    返回 Node.js 进程的内存使用情况的对象,该对象每个属性值的单位为字节。

    {
      rss: 4935680,  // 驻留集大小, 是给这个进程分配了多少物理内存
      heapTotal: 1826816,  // V8总内存
      heapUsed: 650472,  // V8已使用内存
      external: 49879  // V8管理的,绑定到Javascript的C++对象的内存
    }
    
  • pid => Integer

    当前进程的PID

  • ppid => Integer

    当前父进程的进程ID

  • platform => String

    当前运行的 Nodejs 进程的操作系统平台

  • nextTick(callback[, ...args])

    • args => 调用 callback 时传入的其他参数

    callback 添加到下一个时间点的队列。 一旦当轮的事件循环全部完成,则调用下一个时间点的队列中的所有回调, 其优先级大于 setTimeout(fn, 0) , 它会在事件循环的下一个时间点中触发任何其他 I/O 事件(包括定时器)之前运行

  • uptime() => Integer

    返回当前 Node.js 进程运行时间秒长, 包含秒的分数, 需要使用 Math.floor() 来得到整秒钟

  • version => String

    返回当前 Node.js 的版本信息

  • versions => Object

    Node.js 和其依赖的版本信息

    { 
      http_parser: '2.7.0',
      node: '8.9.0',
      v8: '6.3.292.48-node.6',
      uv: '1.18.0',
      zlib: '1.2.11',
      ares: '1.13.0',
      modules: '60',
      nghttp2: '1.29.0',
      napi: '2',
      openssl: '1.0.2n',
      icu: '60.1',
      unicode: '10.0',
      cldr: '32.0',
      tz: '2016b' 
    }
    
  • stdin => Stream

    返回连接到 stdin (fd 0) 的流。 它是一个 net.Socket 流(也就是双工流),除非 fd 0 指向一个文件,在这种情况下它是一个可读流

    process.stdin.setEncoding('utf8');
    
    process.stdin.on('readable', () => {
      const chunk = process.stdin.read();
      if (chunk !== null) {
        process.stdout.write(`数据: ${chunk}`);
      }
    });
    
    process.stdin.on('end', () => {
      process.stdout.write('结束');
    });
    
  • stdout => Stream

    返回连接到 stdout (fd 1) 的流。 它是一个 net.Socket 流(也就是双工流),除非 fd 1 指向一个文件,在这种情况下它是一个可写流

    process.stdin.pipe(process.stdout);
    
  • stderr => Stream

    返回连接到 stderr (fd 2) 的流。 它是一个 net.Socket 流(也就是双工流),除非 fd 2 指向一个文件,在这种情况下它是一个可写流