node js

一.进程管理

  rocess是一个全局内置对象,可以在代码中的任何位置访问此对象,这个对象代表我们的node.js代码宿主的操作系统进程对象。

使用process对象可以截获进程的异常、退出等事件,也可以获取进程的当前目录、环境变量、内存占用等信息,还可以执行进程退出、工作目录切换等操作。

下面我们一起来学习一下process对象的一些常用方法。

  1.cwd函数的基本用法

    当我们想要查看应用程序当前目录时,可以使用cwd函数,使用语法如下:

process.cwd()

  2.chdir函数的基本用法

  如果我们需要改变应用程序的目录,就要使用chdir函数了,他的用法如下:

process.chdir("目录")

  3.stdout的基本用法

  stdout是标准输出流,我们可以看下这样一个示例:

console.log=function(value){
  process.stdout.write(value+'\n');  
}

  stdout它的作用就是将内容打印到输出设备上,console.log就是封装了它。

  4.stderr的基本用法

stderr是标准错误流,和stdout的作用差不多,不同的是他用来打印错误的信息,我们可以通过它来捕获错误信息,基本是用方法是:

process.stderr.write(输入内容)

  5.stdin的基本用法

stdin是进程的输入流,我们可以通过注册时间的方式来获取输入的内容,如下

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

  chunk就是输入流中的内容

  6.exit函数的基本用法

如果你需要在程序内杀死进程,退出程序,可以使用exit函数,示例如下:

process.exit(code);

参数code为退出后返回的代码,如果省略则默认返回0;

   7.监听进程事件

使用process.on()方法可以监听进程事件。

exit事件,

当进程退出之前,会触发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("我故意的...");

  

   8.设置编码

但我们在输入中文的时候,可能会出现乱码问题,这是因为编码不同造成的,所以在这种情况下,我们需要为流设置编码,如下:

process.stdin.setEncoding(编码);
 
process.stdout.setEncoding(编码);
 
process.stderr.setEncoding(编码);

二,文件操作  

  1.文件I/O fs模块的基本用法

    开发中我们经常会有文件I/O的需求,node.js中提供一个名为fs的模块来支持I/O操作,fs模块的文件I/O是对标准POSIX函数的简单封装。

  2.writeFile函数的基本用法

    文件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。

  3.appendFile函数的基本用法。

  

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”;

  4.exists函数的基本用法

    如何检查一个文件是否存在,我们可以使用exists函数来帮助你,用法如下:

      fs.exists(文件,callback);

    exists的回调函数也是只有一个参数,类型为boolean类型,通过它来表示文件是否存在

  

var fs= require("fs");
 
fs.exists('/etc/passwd', function (exists) {
  console.log(exists ? "存在" : "不存在!");
});

  5.rename函数的基本用法

    修改文件名称是我们经常会遇到的事情,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");
})

  6.readFile函数的基本用法

    读区文件是最常用的功能之一,使用fs模块读区文件的语法如下,

      fs.readFile(文件,编码,回调函数);

var fs = require('fs');
 
fs.readFile(文件名, function (err, data) {
  if (err) throw err;
  console.log(data);
});

  在回调中的data就是我们读区文件的内容

  7.unlink函数的基本用法

   删除文件,语法如下:

      fs.unlink(文件,回调函数(err));

var fs = require('fs');
 
fs.unlink(文件, function(err) {
  if (err) throw err;
  console.log('successfully deleted');
});

  8.mkdir函数的基本用法

  除了针对文件的操作,目录的创建、删除也经常遇到的,下面我们来看看node.js中如何创建目录:

fs.mkdir(路径,权限,回调函数(err));

  参数

  1. 路径:新创建的目录。
  2. 权限:可选参数,只在linux下有效,表示目录的权限,默认为0777,表示文件所有者、文件所有者所在的组的用户、所有用户,都有权限进行读、写、执行的操作。
  3. 回调函数:当发生错误时,错误信息会传递给回调函数的err参数。

  9.rmdir函数的基本用法

删除目录也是必不可少的功能,rmdir函数可以删除指定的目录:fs.rmdir(路径,回调函数(err));

var fs = require('fs');
 
fs.rmdir(path, function(err) {
  if (err) throw err;
  console.log('ok');
});

  10.readdir函数的基本用法

如果要读取目录下所有的文件应该怎么办呢?readdir函数可以读取到指定目录下所有的文件,示例如下:

var fs = require('fs');
 
fs.readdir(目录,回调函数(err,files));

回调函数 (callback) 接受两个参数 (err, files) 其中 files 是一个存储目录中所包含的文件名称的数组,数组中不包括 '.' 和 '..'。

文件I/O是最基本的操作到此就介绍完了,我们应该熟悉掌握。

fs模块不但提供异步的文件操作,还提供相应的同步操作方法,需要指出的是,nodejs采用异步I/O正是为了避免I/O时的等待时间,提高CPU的利用率,所以在选择使用异步或同步方法的时候需要权衡取舍。

三、URL处理

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/' }

  2.parse函数 —— 条件解析

  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' }

  3.parse函数 —— 解析主机

   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了。

  4.format函数的基础用法

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字段一一对应。

  5.resolve函数的基础用法

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'

  

posted @ 2016-04-14 17:18  ァ颏餶こ铭訫の  阅读(203)  评论(0编辑  收藏  举报