标签:
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.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:\Windows\system32\cmd.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\r\n‘){
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\n");
});
执行脚本文件:
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\r\n‘ && chunk !==null) {
process.stdout.write(‘data: ‘ + chunk);
}
if(chunk == ‘bye\r\n‘){
process.stdin.emit("end");
}
});
process.stdin.on(‘end‘, function() {
process.stdout.write(‘end\n‘);
});
执行脚本文件:
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对象提供以下方法:
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("\nthis 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事件:
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-C
。Windows 不支持发送信号
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
标签:
原文地址:http://www.cnblogs.com/Francis-YZR/p/5262725.html