zoukankan      html  css  js  c++  java
  • NodeJs之global,process

    today, 我们的话题作文是nodejs,我尝试对它的描述是:似曾相似,但它又不一样的存在着。百花齐放的it世界里,以独特身姿绽放的美丽更容易吸引人。也许只是不了解,也许时间会给出答案,nodejs你值得拥有。

    本篇来聊一点:

     1.nodejs的全局对象(重点process)

     2.process进程.

     3.console.

    1.global全局对象

    在NodeJs中的全局对象是global,所有全局变量,除了global本身以外都是blobal对象的属性。通常在NodeJs能够直接访问到的对象通常都是global的属性.

    2.process进程

    3.console

    4.require

    引入模块。

    5.exports

    module.exports 的引用.

    6.module

    当前模块的引用。通过 require()module.exports定义了哪个模块输出可用。

    module 不是全局的,而是模块本地的

    7.setTimeout

    8.clearTimeout

    9.setInterval

    10.clearInterval

    process是global全局对象的一个属性,是一个全局变量,用于描述当前NodeJs进程状态的对象。

    process对象提供一系列属性,用于返回系统信息。

    • process.pid
    • process.version
    • process.platform
    • process.title
    • process.argv
    • process.env
    • process.execPath
    • process.stdout
    • process.stdin
    • process.stderr

    准备工作:创建process.js脚本文件

    2.1 process.pid

    process.pid是当前进程的进程号。

    比如往process.js脚本文件写入如下内容:

    console.log("this process id is :"+process.pid);

    执行脚本文件:
    E:NodeJS>node process.js
    this process id is :12424

    E:NodeJS>node process.js
    this process id is :6808

    2.2 process.version

    process.version是NodeJS的版本,比如v0.10.18。

    比如往process.js脚本文件写入如下内容:

    console.log("this process Version is :"+process.version);

    执行脚本文件:

    E:NodeJS>node process.js
    this process version is :v4.3.2
    2.3 process.platform

    process.platform:当前系统平台,比如Linux。

    比如往process.js脚本文件写入如下内容:

    console.log("this process platform is :"+process.platform);

    执行脚本文件:

    E:NodeJS>node process.js
    this process platform is :win32

    2.4 process.title

    process.title是进程的标题,默认值为“node”,可以自定义该值。

    比如往process.js脚本文件写入如下内容:

    console.log("this process title is :"+process.title);
    process.title="myProcess";
    console.log("my process title is :"+process.title);

    执行脚本文件:

    E:NodeJS>node process.js
    this process title is :管理员: C:Windowssystem32cmd.exe - node  process.js
    my process title is :myProcess

    2.5 process.argv

    process.argv是运行参数数组。当前进程的命令行参数数组
    意思在命令行中执行脚本时所带的运行参数。
    如:在cmd中:
    node myArgv.js argv1 argv2 argv3 argv4
    上面命令行中myArgv.js是脚本文件 后面的argv1,argv2等都是运行参数,在myArgv.js脚本文件中通过process.argv可以得到运行参数
    myArgv.js的内容如下:
    console.log(process.argv);
    结果为:
    [
      'node',
      '/E:/NodeJs/myArgv.js',
      'argv1',
      'argv2',
      'argv3',
      'argv4'
    ]

    2.6 process.env

    process.env指向当前shell的环境变量,比如process.env.HOME。

    你可以写入这个对象,但是不会改变当前运行的进程。

    比如往process.js脚本文件写入如下内容:

    console.log("this process env is :"+process.env);
    //console.log(process.env);
    process.env.foo="myfoo";
    console.log("my process env.foo is :"+process.env.foo);

    执行脚本文件:

    E:NodeJS>node process.js
    this process env is :[object Object]
    my process env.foo is :myfoo
    ==>你可以把console.log(process.env);这一行不要注释,看一下env对象里面的成员.

    2.7 process.execpath

    process.execpath:运行当前进程的可执行文件的绝对路径。

    2.8 process.stdout

    process.stdout是nodejs的标准输出流。

    console.log()的底层就是通过stdout.write();

    比如往process.js脚本文件写入如下内容:

    process.stdout.write("I am stdout");

    执行脚本文件:

    E:NodeJS>node process.js
    I am stdout

    2.9 process.stdin

    process.stdin是指向标准输入流。

    在老的流模式里,stdin流默认暂停,必须调用 process.stdin.resume() 读取。可以调用 process.stdin.resume() 切换到老的模式。

    老的模式初始化时它是被暂停的,要想从标准输入流读取数据,必须恢复流,并手动编写流的事件响应函数。

     比如往process.js脚本文件写入如下内容:

    process.stdin.resume();
    process.stdin.setEncoding("utf8");
     
    process.stdin.on("data", function (chunk) {
      process.stdout.write("data: " + chunk);
     
      if(chunk=='bye '){
        process.stdin.emit("end");
        console.log("YES "+chunk);
      }
      else{
        process.stdin.emit("end");
        console.log("No "+chunk);
      }
    });
     
    process.stdin.on("end", function () {
      process.stdout.write("end ");
    });

    执行脚本文件:
    E:NodeJS>node process.js
    bye
    data: bye
    end
    YES bye

    如果开始一个新的工程,最好选择新的流,而不是用老的流。

     比如往process.js脚本文件写入如下内容:

    process.stdin.setEncoding('utf8');

    process.stdin.on('readable', function() {
      var chunk = process.stdin.read();
      if (chunk != 'bye ' && chunk !==null) {
        process.stdout.write('data: ' + chunk);
      }
      if(chunk == 'bye '){
        process.stdin.emit("end");
      }
    });

    process.stdin.on('end', function() {
      process.stdout.write('end ');
    });

    执行脚本文件:

    E:NodeJS>node process.js
    yzr
    data: yzr
    bye
    end


    process.stdin 可以工作在老模式里,和 v0.10 之前版本的 node 代码兼容

    2.10 process.stderr

    process.stderr:指向标准错误。

    process.stderr.write(" this  ia a error");

    process对象提供以下方法:

    • process.exit()
    • process.cwd()
    • process.chdir()
    • process.nextTick()

    2.11 process.exit()

    process.exit():退出当前进程。使用指定的 code 结束进程。如果忽略,将会使用 code 0

    process.exitCode:进程退出时的代码,如果进程优雅的退出,或者通过 process.exit() 退出,不需要指定退出码。对于退出状态码的各个取值的意义,请查看api

     比如往process.js脚本文件写入如下内容:

    process.on('exit',function(){
      if(process.exitCode==0){
       console.log("this process no found exception,will eixt.");
      }
      else{
        console.log(" this process found exception,the exitCode is "+process.exitCode);
      }
    })
    process.stdout.write(" this process will exit");
    process.exit(1);

    2.12 process.cwd()

    process.cwd():返回运行当前脚本的工作目录的路径。

    console.log('current directory:'+process.cwd());

    2.12 process.chdir()

    process.chdir("工作目录路径"):改变工作目录。

    2.13 process.nextTick()

    process.nextTick():将一个回调函数放在下次事件循环的顶部。

    Nodejs是单线程的,在进行复杂的操作时为了考虑性能,Nodejs提供了nextTick(),可以把复杂的操作,分成几个小的简单的部分来完成。

    function doSomethings(args,callback){//一件复杂的事情
        doSomethingComplicate(args); //分成的第一步
        process.nextTick(callback);//分成的第二步
    }

    doSomething(args,function onEnd(){
        compute();//被回调的函数
    });

    process事件:

    • exit
    • uncaughtException
    • singal
    • memoryusage

    2.14 exit 退出进程事件

    2.15 捕获异常事件

    process.on('uncaughtException', function (err) {
      console.log('Caught exception: ' + err);
    });
    setTimeout(function () {
      console.log('This will still run.');
    }, 500);
    
    nonexistentFunc();
    console.log('This will not run.');
    注册了uncaughtException事件来捕捉系统异常。执行到nonexistentFunc()时,因为该函数没有定义所以会抛出异常。
    因为javascript是解释性的语言,nonexistentFunc()方法上面的语句不会被影响到,他下面的语句不会被执行。

    注意,uncaughtException 是非常简略的异常处理机制。

    尽量不要使用它,而应该用 domains 。如果你用了,每次未处理异常后,重启你的程序。

    2.16 singal

    当进程接收到信号时就触发。

    // Start reading from stdin so we don't exit.
    process.stdin.resume();
    
    process.on('SIGINT', function() {
      console.log('Got SIGINT.  Press Control-D to exit.');
    });
    在大多数终端程序里,发送 SIGINT 信号的简单方法是按下 信号Control-CWindows 不支持发送信号

    2.17 memoryusage()

    返回一个对象,描述了 Node 进程所用的内存状况,单位为字节。

    var util = require('util');
    
    console.log(util.inspect(process.memoryUsage()));

    3.1 console.log()

    用法相似于C语言的print();

    console.log("%d + %d = %d",1,1,10);

    3.2 console.error()

    3.3 console.trace()

    详细请看api :http://wiki.jikexueyuan.com/project/nodejs/process.html

     

  • 相关阅读:
    IntelliJ Idea 授权服务器使用
    git 查看对比分支commit命令笔记
    手动搭建一个webpack+react笔记
    并查集的初步认识
    多视口的实现
    对相机的理解及使用多相机绘制只旋转的坐标系
    拾取模型的原理及其在THREE.JS中的代码实现
    面向工程领域的图形平台介绍
    ftgl 绘制文字
    occ 中绘制二维矩形
  • 原文地址:https://www.cnblogs.com/Francis-YZR/p/5262725.html
Copyright © 2011-2022 走看看