• Nodejs入门


    目录

    Process

      cwd

      chdir

      stdout

      stderr

      stdin

      exit

      监听进程事件

        exit

        uncaughtException

      设置编码

    文件I/O

      写入文件writeFile

      追加写入appendFile

      修改名字rename

      移动文件rename

      读取文件readFile

      删除文件unlink

      创建目录mkdir

      删除目录rmdir

      读取目录readdir

    URL

    path

    querystring

    util

      util.format

      util.inspect

    child_process

    一、Process

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

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

    1.1 cwd

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

    process.cwd();

     

    1.2 chdir

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

    process.chdir("目录");

    1.3 stdout

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

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

    1.4 stderr

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

    process.stderr.write(输入内容);

    1.5 stdin

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

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

     示例中的chunk就是输入流中的内容。

    1.6 exit

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

    process.exit(code);

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

    1.7 监听进程事件

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

    1.7.1 exit事件

    当进程要退出之前,会触发exit事件。通过监听exit事件,我们就可以在进程退出前进行一些清理工作:

    //参数code表示退出码
    process.on("exit",function(code){
        //进行一些清理工作
        console.log("I am tired...")
    });
    var tick = Date.now();
    console.log(tick);

    1.7.2 uncaughtException事件

    如果进程发生了未捕捉的异常,会触发uncaughtException事件。通过监听这个事件,你可以 让进程优雅的退出:

    //参数err表示发生的异常
    process.on("uncaughtException",function(err){
        console.log(err);
    });
    //故意抛出一个异常
    throw new Error ( "我故意的..." );

    1.8 设置编码

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

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

    二、文件I/O

    2.1 写入文件writeFile

    fs模块提供writeFile函数,可以异步的将数据写入一个文件, 如果文件已经存在则会被替换。用法如下:

    fs.writeFile(filename, data[, options],callback)
    var fs= require("fs");
     
    fs.writeFile('test.txt', 'Hello Node', function (err) {
      if (err) throw err;
      console.log('Saved successfully'); //文件被保存
    });
     

    data可以是string或者是Buffer,编码格式参数可选,默认为"utf8",回调函数只有一个参数err。

    如果 data 是一个 buffer,则忽略 encoding 选项。它默认为 'utf8'

    如果 options 是一个字符串,则它指定了字符编码。

    注意,多次对同一文件使用 fs.writeFile 且不等待回调,是不安全的。 对于这种情况,强烈推荐使用 fs.createWriteStream

    2.2 追加写入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!');
    });

    编码格式默认为"utf8"

    2.3 修改名字rename

    修改文件名称是我们经常会遇见的事情,rename函数提供修改名称服务:

    var fs= require("fs");
     
    fs.rename(旧文件,新文件,回调函数(err){
      if (err) throw err;
      console.log('Successful modification,');
    });

    2.4 移动文件rename

    移动文件也是我们经常会遇见的,可是fs没有专门移动文件的函数,但是我们可以通过rename函数来达到移动文件的目的,示例如下。

    var fs = require('fs');
     
    fs.rename(oldPath,newPath,function (err) {
    if (err) throw err;
    console.log('renamed complete');
    });

    2.5 读取文件readFile

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

    fs.readFile(文件,编码,回调函数);
    var fs = require('fs');
     
    fs.readFile(文件名, function (err, data) {
      if (err) throw err;
      console.log(data);
    });

    回调函数里面的data,就是读取的文件内容。

    面对一堆垃圾的文件总是有想删除的冲动,我有强迫症?你才有呢。

    好在有unlink函数,终于得救了,示例如下:

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

     

    2.7 创建目录mkdir

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

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

    参数

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

     

    2.8 删除目录rmdir

    删除目录也是必不可少的功能,rmdir函数可以删除指定的目录:

    fs.rmdir(路径,回调函数(err));
    var fs = require('fs');
     
    fs.rmdir(path, function(err) {
      if (err) throw err;
      console.log('ok');
    });

    2.9 读取目录readdir

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

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

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

    三、URL

    见官网http://nodejs.cn/api/url.html

     

    四、path

    见官网 http://nodejs.cn/api/path.html

    五、querystring

    见官网 http://nodejs.cn/api/querystring.html

    六、 util

    6.1 util.format

    util.format(format[, ...args])

     format函数根据第一个参数,返回一个格式化字符串,第一个参数是一个可包含零个或多个占位符的字符串。每一个占位符被替换为与其对应的转换后的值,支持的占位符有:

    • %s - 字符串。
    • %d - 数值(包括整数和浮点数)。
    • %j - JSON。如果参数包含循环引用,则用字符串 '[Circular]' 替换。
    • %% - 单个百分号('%')。不消耗参数。

    1) 如果占位符没有对应的参数,则占位符不被替换。

    var util = require('util');
    var result = util.format('%s:%s', 'foo');
    console.log(result); // foo:%s

    2) 如果传入 util.format() 方法的参数比占位符的数量多,则多出的参数会被强制转换为字符串(对于对象和符号,使用 util.inspect()),然后拼接到返回的字符串,参数之间用一个空格分隔。

    util.format('%s:%s', 'foo', 'bar', 'baz'); // 'foo:bar baz'

    3)如果第一个参数不是一个格式字符串,则 util.format() 返回一个所有参数用空格分隔并连在一起的字符串。 每个参数都使用 util.inspect() 转换为一个字符串。

    util.format(1, 2, 3); // '1 2 3' 

     

    6.2 util.inspect

    util.inspect(object[, options])

    util.inspect() 方法返回 object 的字符串表示,主要用于调试。 附加的 options 可用于改变格式化字符串的某些方面。

    例子:

    var util = require('util');
    var obj={
        a:3,
        b:'haha',
        c:[3,4,'heihei'],
        d:{
            name:'mary',
            sex:'femal',
            child:[{
                     name:'mike',
                     age:10
                },{
                     name:'anna',
                     age:11
                }]
        }
    };
    var result = util.inspect(obj, {showHidden:true, depth:null});
    console.log(result);
    // { 
    //      a: 3,
    //      b: 'haha',
    //      c: [ 3, 4, 'heihei', [length]: 3 ],
    //      d: { 
    //              name: 'mary',
    //              sex: 'femal',
    //              child: [ { 
    //                     name: 'mike',
    //                     age: 10 
    //                   },{ 
    //                     name: 'anna', 
    //                     age: 11 
    //               },
    //               [length]: 2 
    //               ] 
    //         } 
    //     }
    • object<any> 任何 JavaScript 原始值或对象。
    • options<Object>
      • showHidden<boolean> 如果为 true,则 object 的不可枚举的符号与属性也会被包括在格式化后的结果中。 默认为 false
      • depth<number> 指定格式化 object 时递归的次数。 这对查看大型复杂对象很有用。 默认为 2。 若要无限地递归则传入 null
      • colors<boolean> 如果为 true,则输出样式使用 ANSI 颜色代码。 默认为 false。 颜色可自定义,详见自定义util.inspect 颜色
      • customInspect<boolean> 如果为 false,则 object 上自定义的 inspect(depth, opts) 函数不会被调用。 默认为 true
      • showProxy<boolean> 如果为 true,则 Proxy 对象的对象和函数会展示它们的 target 和 handler 对象。 默认为 false
      • maxArrayLength<number> 指定格式化时数组和 TypedArray 元素能包含的最大数量。 默认为 100。 设为 null 则显式全部数组元素。 设为 0 或负数则不显式数组元素。
      • breakLength<number> 一个对象的键被拆分成多行的长度。 设为 Infinity 则格式化一个对象为单行。 默认为 60

    见官网 http://nodejs.cn/api/util.html

    七、child_process

  • 相关阅读:
    Rotate List
    Spiral Matrix II
    Jump Game
    Maximum Subarray
    Pow(x, n)
    Anagrams
    Permutations
    unity 相机的问题
    NGUI 学习
    空间数据库1
  • 原文地址:https://www.cnblogs.com/YangqinCao/p/6924521.html
Copyright © 2020-2023  润新知