Node.js核心原理

根据不同的URL响应不同的HTML内容

1、核心实现步骤

1.获取请求的URL地址
2.设置默认的响应内容为404 Not found
3.判断用户请求是否为 / 或者  /index.html
4.判断用户请求是否为 /about.html
5.设置Content-Type响应头,防止网页中文乱码
6.使用res.end()方法,把内容响应给客户端

=================================================================================

案例:实现clock时钟的web服务器请求打开

2、实现步骤

1.导入需要的模块
2.创建一个web服务器
3.将资源的请求URL地址映射为文件的存放路径
4.读取文件内容并相应给客户端
5.优化资源的请求路径

=================================================================================

Node.Js 中的模块化

模块加载

    1、使用强大的 require()方法,可以加载内置模块、用户自定义模块、第三方模块进行使用
        加载用户自定义模块时,要添加路径

模块作用域

    防止模块内的内容被污染

向外共享模块作用域中的成员

    1、在每个.js自定义模块中,都有一个module对象,内部存储了和当前模块有关的信息
    2、module.exports()对象:
        在自定义模块中,使用module.exports()对象,讲模块内的成员共享出去,供外界使用;
        外界用require()方法导入模块时,得到的就是module.exports()所指向的对象;
    3、由于module.exports拼写较为复杂,Node简化后提供了exports对象,默认情况下,exports和module.exports指向同一个对象。但是,主要以module.exports指向的对象为准

4、module.exports和exports的使用误区:调用自定义模块时,得到的永远是module.exports所指向的最新对象。

误区1:
    exports.username='sz'
    module.exports={
        gender:'男',
        age:22
    }
    输出:{gender:'男',age=22}
误区2:
    module.exports.username='sz'
    exports={
        gender:'男',
        age:22
    }
    输出:{username:'sz'}
误区3:
    exports.username='sz'
    module.exports.gender='男'
    输出:{username:'sz',gender:'男'}
误区4:
    exports={
        gender:'男',
        age:22
    }
    module.exports=exports
    module.exports.age='22'
    输出:{username:'sz',gender:'男',age:'22'}

为防止混乱,尽量不要在同一个模块中使用module.exports和exports

=================================================================================

Node.Js中的模块化规范

CommonJS规定:

    1、每个模块内部,module变量代表当前模块
    2、module变量是一个对象,他的exports属性(即module.exports)是对外的接口
    3、加载某个模块,其实是加载该模块的module.exports属性。require()方法用于加载模块

=================================================================================

NodeJS中的第三方模块叫做包

    从https://www.npmjs.com/网站上搜索自己所需要的包
    从https://registry.npmjs.org/服务器上下载自己所需要的包

如何下载包

    包管理工具,包含在node.js中 

npm初体验:

# 1、使用npm包管理工具,在项目中安装时间格式化的包moment
      下载包的方式:
          在文件目录下创建一个终端,然后输入代码:npm install 包名
                                          或   npm i 包名
  2、使用require()导入格式化时间的包
  3、参考moment的API文档对时间进行格式化
  4、想要下载指定版本的包,可以通过@符号指定具体版本
        eg:npm i moment@2.22.2

=======================================================================

包管理配置文件

1、快速创建package.json包管理配置文件:np init -y

    注意 :1.上述命令只能在英文的目录下成功运行,项目文件夹不能包含英文或者空格(路径中可以包含中文)
          2.运行npm install命令安装包的时候,npm包管理工具会自动把包的名称 和版本号,记录到package.json中

2、可以同时安装多个npm包:npm i 包名1 包名2 …

3、一次性安装所有的包:当从Git上获取到源代码时,是没有node_module文件的,只有package.json文件,此时需要根据已有的包管理配置文件下载所需要的包:npm i或npm install

    方式:1、执行npm install或npm i命令,npm包管理工具会先读取package.json中的dependencies节点,然后下载所需要的包

4、卸载包:运行npm uninstall 具体包名 进行卸载

    注意:使用该方法,会把卸载的包,自动从package.json的dependencies中移除

5、DevDependencies节点:npm i 包名 -D 完整命令:npm install 包名 --save-dev

    如果某些包 只在项目开发阶段 会用到,在项目上线之后不会用到,则建议把这些包记录到DevDependencies节点中。
    与之对应的,如果在上线之后和开发阶段都要用到,则放在dependencies节点中

6、解决npm下载速度慢的方法:切换npm下包镜像源

    #查看当前的下包镜像源
    npm config get registry
    #将下包的镜像源切换成淘宝镜像源
    npm config set registry=https://registry.npm.taobao.org/
    #检查镜像源是否下载成功
    npm config get registry

7、切换下包镜像源:

    #通过npm包管理器,将nrm安装为全局可用的工具
    npm i nrm -g      //-g是全局设置 
    #查看所有可用的镜像源
    nrm ls
    #将下包的镜像源切换为想要的镜像
    nrm use 镜像源名称      //eg:nrm use taobao 

=======================================================================

包的分类:

    1、项目包:诶安装到项目node_module目录中的包都是项目包
            开发依赖包:记录到DevDependencies节点中,只在开发期会用到
                    npm i 包名 -D
            核心依赖包:记录到dependencies节点中,在开发期和项目上线之后都会用到
                    npm i 包名
    2、全局包;在执行npm install  命令时,在后面加上-g参数时,就会把包安装为全局包
            命令:npm i 包名 -g             //全局安装指定的包
                 npm uninstall 包名 -g     //卸载全局安装的包
            只有工具类性质的包,才有全局安装的必要。
    3、i5ting_toc:是一个可以吧md文档转为html页面的工具
            #将i5ting_toc安装为全局包
            npm i i5ting_toc -g

调用i5ting_toc,轻松实现md 转html的功能

            i5ting_toc -f 要转换的md文件的路径 -o   //要进入到文件所在目录再执行操作

=======================================================================

开发属于自己的包

1、需要实现的功能

    //1、导入自己的包
    const itheima = require('itheima-utils)
    //2、实现功能1:
    const dt = itheima.dateFormat(new Date())
    //输出
    console.log(dt)

    //3、实现功能2:转移HTML中的特殊字符
    const htmlstr ='<h1 style="color:red ;">你好!&copy;<span>小黄</span></h1>'
    const str =itheima.htmlEscape(htmlstr)
    console.log(str)

    //4、功能3:
    const rawHTML=itheima.htmlUnEscape(str)
    console.log(rawHTML)

2、初始化包的基本结构

    1.新建itheima-tolls文件夹,作为包的根路径
    2.IT黑马-tool文件夹中,创建以下三个文件:
            ·package.json(包管理配置文件)
            ·index.js(包的入口文件)
            ·README.md(包的说明文档)
    3.初始化package.json :
    <!-- {
            "name": "maheiit-tools",
            "version": "1.0.0",
            "main": "index.js",
            "description": "提供了格式化时间、HTMLEscape相关功能",
            "keywords": [
            "itheima",
            "dateFormat",
            "escape"
            ],
            "license": "ISC"
            } 
    -->
    4.在index.js中定义格式化时间的方法。
    5.在index.js中定义转义HTML的方法
    6.将包内的方法模块化
    7.将自定义包发布

=======================================================================

自定义模块的加载:

    1、使用require()加载自定义模块时,必须指定以./或../开头的路径标识符,否则node会将它当做内置模块或第三方模块进行加载
    2、在导入自定义模块时,如果省略文件拓展名,加载文件名的优先级为:确切的文件名.后缀> .js > .json > .node 等结尾的文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值