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

 

原文地址:https://www.cnblogs.com/Francis-YZR/p/5262725.html