• 【Node.js---学习小结(2)】


    一、NodeJS的模块系统

    1、为什么使用模块

    (1)提供代码的使用效率和可读性。将相应的程序封装在模块中

    (2)通过模块打包程序不会改变原有的全局作用域

    (3)模块可以发布到npm仓库中与他人共享

    2、自定义模块

    (1)遵循CommonJS规范,用于服务器端开发,不用考虑非同步方式

    A、CommonJS是一套代码规范,目的是为了构建JavaScript在浏览器之外的生态系统 (服务器端, 桌面端)

    B、CommonJS的主要内容:
    a、模块必须通过 module.exports 导出对外的变量或接口
    b、通过 require() 来导入其他模块的输出到当前模块作用域中(模块一般在文件的顶部导入)。

    ☀️举个例子( module.exports 导出):

    自定义模块:demo.js 代码

    module.exports.name='西安邮电'
    module.exports.age=78
    module.exports.getName=function(){
        console.log('姓名:'+this.name)//this表示当前模块的name变量所对应的值,也就是西安邮电
    }
    module.exports.getAge=function(){
        console.log('年龄:'+this.age)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    app.js导入demo.js这个模块:

    //是指将demo.js自定义的这个整个模块导入,就是将里面的变量和方法都导进来,然后创建一个对象去引用
    var person =require('../module/demo.js')
    person.getName()
    person.getAge()
    console.log(person.name)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果:
    在这里插入图片描述

    (2)exports和module.exports的关系

    ☀️举个例子(exports导出):

    自定义模块:hello.js 代码:

    var show_day=new Array('星期一','星期二','星期三','星期四','星期五','星期六','星期七')
    var nowTime =new Date()
    var day=nowTime.getDay()
    exports.sayHello=function(name){
        console.log('你好,'+name)
        console.log('今天是'+show_day[day-1])
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    test.js导入hello.js这个模块:

    var Hello =require('../module/hello')
    Hello.sayHello('张三丰')
    
    • 1
    • 2

    运行结果:
    在这里插入图片描述
    改造:
    自定义模块:hello.js 代码:

    var show_day=new Array('星期一','星期二','星期三','星期四','星期五','星期六','星期七')
    var nowTime =new Date()
    var day=nowTime.getDay()
    /* exports.sayHello=function(name){
        console.log('你好,'+name)
        console.log('今天是'+show_day[day-1])
    } */
    function Hello(name){//Hello是一个构造方法
        this.name=name
        this.sayHello =function(){
        console.log('你好,'+this.name)
        console.log('今天是'+show_day[day-1])
        }
    } 
    module.exports= Hello//导出一个构造方法名字Hello,也就是hello类 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    test.js导入hello.js这个模块:

    var Hello =require('../module/hello')
    var hello =new Hello('张无忌')//实例化后才可以调用方法
    hello.sayHello()
    
    
    • 1
    • 2
    • 3
    • 4

    同样也可以输出相同的结果(推荐此方法):
    在这里插入图片描述
    关系:

    A、exports在模块的文件级别作用域内有效,它在模块被执行前被赋予module.exports的值。

    B、exports只是对module.exports的一个全局引用

    区别

    C、使用exports导出的方法返回的是模块函数,可以直接调用

    D、使用module.exports导出的方法返回的是一个类,需实例化为对象之后才可以调用

    3、模块的加载顺序

    (1)从缓存中加载

    (2)加载核心模块

    (3)加载文件模块

    (4)文件夹作为模块

    (5)从node_modules目录加载

    (6)从全局目录加载

    二、NodeJS的核心模块

    1、os模块:提供基本的计算机系统操作的方法

    (1)使用方式:

    const os = require(‘os’)

    (2)常用方法

    type():返回操作系统的类型

    platform():返回操作系统的平台

    totalmem():返回内存空间

    freemem():返回空闲的内存空间

    cpus():返回CPU的信息

    ☀️举例说明:

    const os=require('os')
    console.log('操作系统的类型:'+os.type())
    console.log('操作系统的平台:'+os.platform())
    console.log('内存总量:'+os.totalmem())
    console.log('空闲内存:'+os.freemem())
    console.log('CPU:'+os.cpus())
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述由上图可知:我有8g的内存(内存越大,所存储的东西越多,cpu一次取得数据就多,系统运行速度就越快),空闲内存是2.9g,8核cpu

    2、util模块:实用工具模块

    (1)使用方式:

    const util = require(‘util’)

    (2)常用方法:

    format():返回格式化的字符串

    const util=require('util')
    var t='----'
    var str=util.format('%s'+t+'%s','西安邮电大学','长安校区')//%S是一个格式字符串,format/* 对字符串进行格式化 */
    console.log(str)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3、path模块:处理和转换文件路径(处理不同平台的路径问题)

    (1)使用方式:

    const path = require(‘path’)

    (2)属性

    path.delimiter:提供平台特定的路径分隔符

    path.sep:提供平台特定的路径分段分隔符

    强调:因为’\‘具有转义字符的含义,所以在win32平台下用字符串表示一个路径时,通常使用的路径分段分隔符为’\\’

    ‘c:\\demo\\code’

    (3)常用方法

    path.normalize():路径格式化

    path.parse(path):返回完整路径的一个对象

    const path =require('path')
    console.log(path.delimiter)//win32平台下的路径分隔符;
    console.log(path.sep)  //win32平台下的路径的分段分隔符是‘\’
    console.log(path.normalize('/test/tt/t1/t2'))
    console.log(path.parse('./app.js'))//返回完整路径的一个对象
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    4、URL(统一资源定位符)模块:用于对url的解析和处理

    前提小知识:

    绝对URI
    比如:‘http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1’
    协议 登录信息 服务器地址 端口 文件路径 查询字符串 片段标示符
    URI :Uniform Resource Identifier,统一资源标识符;
    URL:Uniform Resource Locator,统一资源定位符;
    URN:Uniform Resource Name,统一资源名称。
    其中,URL,URN是URI的子集。

    (1)使用方式:

     const url = require('url') //传统方式
    		   
     const { URL } = require('url') //新的WHATWG API(标准的新的API) 
    
    • 1
    • 2
    • 3

    (2)常用方法

       url.parse('url') //传统方式:将url解析成对象
    		   
       new URL('url') //新的WHATWG API(标准的新的API) 
    
    • 1
    • 2
    • 3

    ☀️举个例子(传统):

    const url=require('url')//传统方式
    var myUrl =url.parse('http://users:pass@sub.host.com:8080/p/a/t/h?query=string#hash')//传统方式
    console.log(myUrl)
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    ☀️举个例子(新的):

    const{URL}=require('url')//新的WHATWG API(标准的新的API)
    var myUrl=new URL('http://users:pass@sub.host.com:8080/p/a/t/h?query=string&addr=西安#hash')//新的
    console.log(myUrl)
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    Url基础指点:

    属性说明
    protocol表示url采用的什么协议
    slashes表示是否有斜线
    host表示主机
    post表示端口(默认80端口不显示)
    hostname表示主机名称
    hash指的是#号后的内容包含#(锚点)
    search指的是?后#前的内容,包含?(查询字符串参数)
    query指的是search不包含?的内容(给http服务器发送数据)
    pathname指的是路径名称,一般指主域名之后的内容(‘/返回自己的路径名/’)
    path路径
    href代表未解析的url地址

    5、querystring模块:解析和处理URL中的查询字符串

    (1)使用方式:

    const querystring = require('querystring')
    
    • 1

    (2)常用方法:

    方法说明
    querystring.parse()将一个URL查询字符串解析成一个键值对的集合
    querystring.stringify(obj[, sep[, eq[, options]]])将一个对象转换成URL查询字符串

    ☀️举个例子:

    const{URL}=require('url')//新的WHATWG API(标准的新的API)
    const querystring=require('querystring')
    var myUrl=new URL('http://users:pass@sub.host.com:8080/p/a/t/h?query=string&addr=西安#hash')//新的
    console.log(myUrl)
    console.log(myUrl.searchParams.get('addr'))
    var qs=querystring.parse(myUrl.search)
    console.log(qs)
    var temp={
          id:'12345',
          hobby:'AA',
          addr:'BB'
    }
    console.log(querystring.stringify(temp))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    三、NodeJS的包管理器 ---- npm(Node Package Manager)

    1、使用npm安装模块后,会自动生成node_modules文件夹,将安装的模块存放在该文件夹中会自动生成package.json文件,给出的项目运行的依赖关系(项目中的模块、版本号)

    2、常用指令:

    (1)升级npm:参数-g表示全局安装

    npm install npm -g

    (2)安装模块

    npm install 模块名称@版本号 安装参数

    (3)卸载模块

    npm uninstall 模块名称

    (4)将npm定向到淘宝镜像(本地的,所以运行更快)

    npm install -g cnpm --registry=https://registry.npm.taobao.org

  • 相关阅读:
    软件工程总结
    SpringBoot集成Redis业务功能 02、定时任务+Redis删除特定前缀key的优雅实现
    Android学习笔记 24. Fragment的产生、使用方法、静态(动态)添加fragment
    HTML网页设计结课作业——基于HTML+CSS仿学校官网页面
    Linux下安装配置redis详细教程,并配置哨兵模式,redis中文详解
    【Java】switch-case 和 if-else 的运行效率差异
    [GAMES101]透视投影变换矩阵中为什么需要改变z值
    小红书和中兴笔试
    字节跳动 CEO 梁汝波发内部信:头条、西瓜、搜索等业务并入抖音
    【Helm三部曲】 Helm 简介及安装
  • 原文地址:https://blog.csdn.net/m0_46839072/article/details/125864959