node.js工具模块

作者: 风慕李 | 来源:发表于2017-12-18 15:49 被阅读17次
    os 模块提供了一些基本的系统操作函数,具体看如下代码:
    node-os.js代码如下
    ---
    var os = require("os");
    // 返回操作系统的默认临时文件夹
    console.log('tmpdir : ' + os.tmpdir());
    // CPU 的字节序
    console.log('endianness : ' + os.endianness());
    // 主机名
    console.log('hostname : ' + os.hostname());
    // 操作系统名
    console.log('type : ' + os.type());
    // 操作系统名
    console.log('platform : ' + os.platform());
    // 操作系统cpu架构,可能的值有 "x64"、"arm" 和 "ia32"
    console.log('arch : ' + os.arch());
    // 操作系统发行版本
    console.log('release : ' + os.release());
    //操作系统运行时间,以秒为单位
    console.log('uptime : ' + os.uptime());
    // 系统内存总量
    console.log('total memory : ' + os.totalmem() + " bytes.");
    // 操作系统空闲内存量
    console.log('free memory : ' + os.freemem() + " bytes.");
    // 数组,返回所安装的每个cpu内核信息:型号、速度、时间
    console.log('cpus : ' + os.cpus());
    // 获得网络接口列表
    console.log('networkInterfaces : ' + os.networkInterfaces());
    

    终端输入:

    G:\node\node-tools> node node-os.js
    tmpdir : C:\Users\admin\AppData\Local\Temp
    endianness : LE
    hostname : DESKTOP-H1QO0Q0
    type : Windows_NT
    platform : win32
    arch : x64
    release : 10.0.16299
    uptime : 454734.2622153
    total memory : 8494243840 bytes.
    free memory : 3918430208 bytes.
    

    如此一来,关于你电脑的操作系统的基本信息,此处可以一目了然。

    path 模块提供了一些用于处理文件路径的小工具,具体看如下代码:
    node-path.js代码如下:
    ---
    var path = require("path");
    // 格式化路径
    console.log('normalize : ' + path.normalize('/node/node-tools..'));
    // 连接路径
    console.log('join: ' + path.join('node','/node-tools', 'node-path.js'));
    // 转换为绝对路径
    console.log('resolve : ' + path.resolve('node-path.js'));
    //判断是否是绝对路径
    console.log('isAbsolute : ' + path.isAbsolute('node-path.js'));
    //判断是否是相对路径
    console.log('relative : ' + path.relative('node','node-tools','/node-path.js'));
    //返回路径中代表文件夹的部分
    console.log('dirname : ' + path.dirname('node/node-tools/node-path.js'));
    //返回路径中的最后一部分
    console.log('basename : ' + path.basename('node-path.js'));
    //返回路径字符串的对象path.parse(pathString);返回路径字符串path.format(pathObject)
    // 路径中文件的后缀名
    console.log('ext name : ' + path.extname('node-path.js'));
    

    终端输入

    G:\node\node-tools> node node-path.js
    normalize : \node\node-tools..
    join: node\node-tools\node-path.js
    resolve : G:\node\node-tools\node-path.js
    isAbsolute : false
    relative : ..\node-tools
    dirname : node/node-tools
    basename : node-path.js
    ext name : .js
    
    net 模块提供了一些用于底层的网络通信的小工具,具体看如下代码:
    node-server.js服务端代码:
    ---
    var net = require('net');
    // net.createServer创建TCP服务器
    var server = net.createServer(function(connection) { 
       console.log('client connected');
    //    connection新连接创建后被触发
       connection.on('end', function() {
          console.log('客户端关闭连接');
       });
       connection.write('Hello World!\r\n');
       connection.pipe(connection);
    });
    // server.listen监听端口
    server.listen(4321, function() { 
      console.log('server is listening');
    });
    

    执行服务端代码:

    G:\node\node-tools> node node-server.js
    server is listening on port 4321
    

    创建客户端node-client.js

    var net = require('net');
    var client = net.connect({port: 4321}, function() {
       console.log('连接到服务器!');  
    });
    client.on('data', function(data) {
       console.log(data.toString());
       client.end();
    });
    client.on('end', function() { 
       console.log('断开与服务器的连接');
    });
    

    执行客户端代码:

     G:\node\node-tools> node node-client.js
    连接到服务器!
    Hello 风慕李!
    
    断开与服务器的连接
    

    你可以尝试着执行客户端代码后观看服务端代码的执行打印,或者关闭服务端查看客户端代码执行打印。
    关于net模块更多用法请参考官网

    DNS模块用于解析域名
    node-dns.js代码如下:
    ---
    var dns = require('dns');
    //dns.lookup 将域名(比如 'www.github.com')解析为第一条找到的记录 A (IPV4)或 AAAA(IPV6)
    dns.lookup('www.github.com', function onLookup(err, address, family) {
        console.log('ip 地址:', address);
        // dns.reverse 将一个域名(如 'runoob.com')解析为一个 rrtype 指定记录类型的数组
        /**
         * rrtypes
        以下列出了 dns.resolve() 方法中有效的 rrtypes值:
        'A' IPV4 地址, 默认 dns.resolve4
        'AAAA' IPV6 地址 dns.resolve6
        'MX' 邮件交换记录 dns.resolveMx
        'TXT' text 记录 dns.resolveTxt
        'SRV' SRV 记录 dns.resolveSrv
        'PTR' 用来反向 IP 查找 
        'NS' 域名服务器记录    dns.resolveNs
        'CNAME' 别名记录 dns.resolveCname
        'SOA' 授权记录的初始值 dns.resolveSoa
        */
        dns.resolve(address, function (err, hostnames) {
            if (err) {
                console.log(err.stack);
            }
            console.log('反向解析 ' + address + ': ' + JSON.stringify(hostnames));
        });
        dns.reverse(address, function (err, hostnames) {
            if (err) {
                console.log(err.stack);
            }
            console.log('反向解析 ' + address + ': ' + JSON.stringify(hostnames));
        });
    });
    
    

    关于dns更多用法请参考这里
    终端执行node-dns.js

    G:\node> node node-tools/node-dns.js
    ip 地址: 192.30.255.112
    反向解析 192.30.255.112: ["192.30.255.112"]
    反向解析 192.30.255.112: ["lb-192-30-255-112-sea.github.com"]
    
    domain模块简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。
    node-domain.js代码如下:
    ---
    var EventEmitter = require("events").EventEmitter;
    var domain = require("domain");
    
    var emitter1 = new EventEmitter();
    
    // 创建域
    var domain1 = domain.create();
    
    domain1.on('error', function(err){
       console.log("domain1 处理这个错误 ("+err.message+")");
    });
    
    // 显式绑定
    domain1.add(emitter1);
    emitter1.on('error',function(err){
       console.log("监听器处理此错误 ("+err.message+")");
    });
    emitter1.emit('error',new Error('通过监听器来处理'));
    emitter1.removeAllListeners('error');
    emitter1.emit('error',new Error('通过 domain1 处理'));
    var domain2 = domain.create();
    domain2.on('error', function(err){
       console.log("domain2 处理这个错误 ("+err.message+")");
    });
    // 隐式绑定
    domain2.run(function(){
       var emitter2 = new EventEmitter();
       emitter2.emit('error',new Error('通过 domain2 处理'));   
    });
    domain1.remove(emitter1);
    emitter1.emit('error', new Error('转换为异常,系统将崩溃!'));
    

    代码或许你看着有点绕,你可以结合终端打印来分析重看代码理解:

    G:\node> node node-tools/node-domain.js
    监听器处理此错误 (通过监听器来处理)
    domain1 处理这个错误 (通过 domain1 处理)
    domain2 处理这个错误 (通过 domain2 处理)
    events.js:182
          throw er; // Unhandled 'error' event
          ^
    
    Error: 转换为异常,系统将崩溃!
        at Object.<anonymous> (G:\node\node-tools\node-domain.js:39:24)
        at Module._compile (module.js:573:30)
        at Object.Module._extensions..js (module.js:584:10)
        at Module.load (module.js:507:32)
        at tryModuleLoad (module.js:470:12)
        at Function.Module._load (module.js:462:3)
        at Function.Module.runMain (module.js:609:10)
        at startup (bootstrap_node.js:158:16)
        at bootstrap_node.js:598:3
    

    原文地址 https://gitee.com/wangFengJ/node/tree/master/node-tools

    相关文章

      网友评论

        本文标题:node.js工具模块

        本文链接:https://www.haomeiwen.com/subject/bksmwxtx.html