根据不同的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 ;">你好!©<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 等结尾的文件