标签:
rocess是一个全局内置对象,可以在代码中的任何位置访问此对象,这个对象代表我们的node.js代码宿主的操作系统进程对象。
使用process对象可以截获进程的异常、退出等事件,也可以获取进程的当前目录、环境变量、内存占用等信息,还可以执行进程退出、工作目录切换等操作。
下面我们一起来学习一下process对象的一些常用方法。
当我们想要查看应用程序当前目录时,可以使用cwd函数,使用语法如下:
process.cwd()
如果我们需要改变应用程序的目录,就要使用chdir函数了,他的用法如下:
process.chdir("目录")
stdout是标准输出流,我们可以看下这样一个示例:
console.log=function(value){ process.stdout.write(value+‘\n‘); }
stdout它的作用就是将内容打印到输出设备上,console.log就是封装了它。
stderr是标准错误流,和stdout的作用差不多,不同的是他用来打印错误的信息,我们可以通过它来捕获错误信息,基本是用方法是:
process.stderr.write(输入内容)
stdin是进程的输入流,我们可以通过注册时间的方式来获取输入的内容,如下
process.stdin.on(‘readable‘, function() { var chunk = process.stdin.read(); if (chunk !== null) { process.stdout.write(‘data: ‘ + chunk); } });
chunk就是输入流中的内容
如果你需要在程序内杀死进程,退出程序,可以使用exit函数,示例如下:
process.exit(code);
参数code为退出后返回的代码,如果省略则默认返回0;
使用process.on()方法可以监听进程事件。
当进程退出之前,会触发exit事件,通过监听exit事件,我们可以在进程退出之前进行一些清理工作。
//参数code表示退出码 process.on("exit",function(code){ //进行一些清理工作 console.log("I am tired ...."); }); var tick=Date.now(); console.log(tick);
uncaughtException事件
如果进程发生了未捕获的异常,会触发uncaughtException事件,通过监听这个事件,可以让进程优雅的退出:
//参数err表示发生的异常 process.on("uncaughtException",function(err){ console.log(err); }); //故意抛出一个异常 throw new Error("我故意的...");
但我们在输入中文的时候,可能会出现乱码问题,这是因为编码不同造成的,所以在这种情况下,我们需要为流设置编码,如下:
process.stdin.setEncoding(编码); process.stdout.setEncoding(编码); process.stderr.setEncoding(编码);
开发中我们经常会有文件I/O的需求,node.js中提供一个名为fs的模块来支持I/O操作,fs模块的文件I/O是对标准POSIX函数的简单封装。
文件I/O,写入是必修课之一,fs模块提供了writeFie函数,可以异步的将数据写入到一个文件中,如果文件已经存在则会被替换,用法如下:
fs.writeFile(filername,data,callback);
var fs=require(‘fs‘); fs.writeFile(‘test.txt‘,‘hello node.js‘,function(err){ if(err) throw err; console.log(‘saved successfully‘)//文件被保存。 })
根据参数可以是string或者buffer,编码格式参数可选,默认为“utf-8",回调函数中只有一个参数err。
writeFile函数虽然可以写入文件,但是如果文件已经存在,我们只是想添加一部分内容,它就不能满足我们的需求了,很幸运,fs模块中还有appendFile函数,它可以将新的内容追加到已有的文件中,如果文件不存在,则会创建一个新的文件。使用方法如下:
例:fs.appendFile(文件名,数据,编码,回调函数(err));
var fs= require("fs"); fs.appendFile(‘test.txt‘, ‘data to append‘, function (err) { if (err) throw err; //数据被添加到文件的尾部 console.log(‘The "data to append" was appended to file!‘); });
编码格式默认为“utf-8”;
如何检查一个文件是否存在,我们可以使用exists函数来帮助你,用法如下:
fs.exists(文件,callback);
exists的回调函数也是只有一个参数,类型为boolean类型,通过它来表示文件是否存在
var fs= require("fs"); fs.exists(‘/etc/passwd‘, function (exists) { console.log(exists ? "存在" : "不存在!"); });
修改文件名称是我们经常会遇到的事情,rename函数提供了修改名称的服务。
var fs=require(‘fs‘); fs.rename(oldfile,newfile,callback(err){ if(err)throw err; console.log("Successful modification"); })
移动文件也是我们经常遇到的,可是fs没有专门的移动文件的函数,但是我们可以使用rename函数来达到移动文件的目的。示例如下
var fs=require(‘fs‘); fs.rename(oldpath,newpath,function(err){ if(err)throw err; console.log("renamed complete"); })
读区文件是最常用的功能之一,使用fs模块读区文件的语法如下,
fs.readFile(文件,编码,回调函数);
var fs = require(‘fs‘); fs.readFile(文件名, function (err, data) { if (err) throw err; console.log(data); });
在回调中的data就是我们读区文件的内容
删除文件,语法如下:
fs.unlink(文件,回调函数(err));
var fs = require(‘fs‘); fs.unlink(文件, function(err) { if (err) throw err; console.log(‘successfully deleted‘); });
除了针对文件的操作,目录的创建、删除也经常遇到的,下面我们来看看node.js中如何创建目录:
fs.mkdir(路径,权限,回调函数(err));
参数
删除目录也是必不可少的功能,rmdir函数可以删除指定的目录:fs.rmdir(路径,回调函数(err));
var fs = require(‘fs‘); fs.rmdir(path, function(err) { if (err) throw err; console.log(‘ok‘); });
如果要读取目录下所有的文件应该怎么办呢?readdir函数可以读取到指定目录下所有的文件,示例如下:
var fs = require(‘fs‘); fs.readdir(目录,回调函数(err,files));
回调函数 (callback) 接受两个参数 (err, files) 其中 files 是一个存储目录中所包含的文件名称的数组,数组中不包括 ‘.‘ 和 ‘..‘。
文件I/O是最基本的操作到此就介绍完了,我们应该熟悉掌握。
fs模块不但提供异步的文件操作,还提供相应的同步操作方法,需要指出的是,nodejs采用异步I/O正是为了避免I/O时的等待时间,提高CPU的利用率,所以在选择使用异步或同步方法的时候需要权衡取舍。
node.js为互联网而生,和url打交道是无法避免的了,url模块提供一些基础的url处理。
1.parse函数的基础用法
parse函数的作用是解析url,返回一个json格式的数组,请看下面例子
var url=require(‘url‘); url.parse("http://www.baidu.com");
运行的结果是:
{ protocol: ‘http:‘, slashes: true, auth: null, host: ‘www.baidu.com‘, port: null, hostname: ‘www.baidu.com‘, hash: null, search: null, query: null, pathname: ‘/‘, path: ‘/‘, href: ‘http://www.baidu.com/‘ }
parse函数的第二个参数是个布尔类型,当参数为true时,会将查询条件也解析成json格式的对象
var url = require(‘url‘); url.parse(‘http://www.baidu.com?page=1‘,true)
运行结果:
{ protocol: ‘http:‘, slashes: true, auth: null, host: ‘www.baidu.com‘, port: null, hostname: ‘www.baidu.com‘, hash: null, search: ‘?page=1‘, query: { page: ‘1‘ }, pathname: ‘/‘, path: ‘/?page=1‘, href: ‘http://www.baidu.com/?page=1‘ }
parse函数的第三个三处也是布尔类型,当参数为true时,解析时会讲url的"//"和第一个"/"之间的部分解析成主机名,示例如下:
var url = require(‘url‘); url.parse(‘http://www.baidu.com/news‘,false,true);
运行结果:
{ protocol: ‘http:‘, slashes: true, auth: null, host: ‘www.baidu.com‘, port: null, hostname: ‘www.baidu.com‘, hash: null, search: null, query: null, pathname: ‘/news‘, path: ‘/news‘, href: ‘http://www.baidu.com/news‘ }
与之前的的示例,host的内容不再是null了。
format函数的作用与parse相反,它的参数是一个JSON对象,返回一个组装好的url地址,请看如下示例:
var url = require(‘url‘); url.format({ protocol: ‘http:‘, hostname:‘www.baidu.com‘, port:‘80‘, pathname :‘/news‘, query:{page:1} });
运行结果:
http://www.baidu.com/news?page=1
参数JOSN对象的字段根parse函数解析后返回的JSON字段一一对应。
resolve函数的参数是两个路径,第一个路径是开始的路径或者说当前路径,第二个则是想要去往的路径,返回值是一个组装好的url,示例如下:
var url = require(‘url‘); url.resolve(‘http://example.com/‘, ‘/one‘) // ‘http://example.com/one‘ url.resolve(‘http://example.com/one‘, ‘/two‘) // ‘http://example.com/two‘
标签:
原文地址:http://www.cnblogs.com/zxh930508/p/5391866.html