http
模块的基本使用Javascript 的解析和执行一直是单线程的,但是**宿主环境(浏览器或node)**是多线程的;
异步任务是由宿主环境开启子线程完成,并通过事件驱动、回调函数、队列,把完成的任务, 交给主线程执行;
Javascript解析引擎,一直在做一个工作,就是从任务队列里提取任务,放到主线程里执行。
模块化就是一种约定,一定规范;
场景模拟:小强,小黄,小刚 共同基于 Node.js 开发项目!
在Node.js中有两个作用域,分别是 全局作用域 和 模块作用域;
global
来访问,类似于浏览器中的window
;global.***
来挂载;global
全局作用域来共享成员,会存在全局变量污染问题;module(模块标识)
module 属性是 Common JS 规范中定义的,它是一个对象,表示当前这个具体的 js 模块;
require(引用模块)
每一个实现了 CommonJS 规范的模块,必须定义一个 require() 函数,使用这个 require 函数,就能够 很方便的导入其它 模块中的成员,供自己使用;
exports(暴露模块成员)
每一个模块中,如果想要把自己的一些私有成员,暴露给别人使用,那么,必须实现一个 exports 对象,通过exports对象,可以方便的把模块内私有的成员,暴露给外界使用;
module.exports
和 exports
默认引用了同一个空对象;module.exports
和 exports
作用一致,都可以向外暴露成员;module.exports
为准;注意:浏览器端不能使用 CommonJS规范;因为 CommonJS 下,模块是同步加载的;
AMD/CMD可以理解为是commonjs在浏览器端的解决方案,AMD/CMD下,模块都是异步加载的;
模块
和 包
的概念回顾:Node.js 由三部分组成:ECMAScript 核心 + 全局成员 + 模块成员
模块成员,根据一些区别,又可以分为三大类: 核心模块、第三方模块、用户自定义模块
fs
,path
等模块,都是由Node.js官方提供的核心模块;require('核心模块标识符')
NPM
的网站上搜索并下载才能使用;require('第三方模块的名称标识符')
来导入这个模块require('路径标识符')
Packages
,包是在模块基础上更深一步的抽象;package.json
必须在包的顶层目录下;package.json
文件必须符合 JSON 格式,并且必须包含如下三个属性:name
, version
, main
package.json
,并符合基本规范即可;name:包的名称,必须是唯一
description:包的简要说明
version:符合语义化版本识别规范的版本字符串
keywords:关键字数据,通常用于搜索
maintainers:维护者数组,每个元素要包含name、email、web可选字段
contributors:贡献者数组,格式与maintainers相同。包的坐着应该是贡献者数据的第一个元素
bugs:提交bug的地址,可以是网址或者电子邮件地址
licenses:许可证数组,每个元素要包含type和url字段
repositories:仓库托管地址数组,每个元素要包含type、url和path字段
dependencies:包的依赖,一个关联数组,由包名称和版本号组成。
devDependencies:开发依赖项,表示一个包在开发期间用到的依赖项
https://www.npmjs.com/
;npm install 包名 -g
即可;其中 -g
参数,表示 把包安装到全局目录中的意思;C:\Users\用户目录\AppData\Roaming\npm
npm uninstall 包名 -g
即可;其中 uninstall
表示卸载的意思;npm init
或者npm init -y
命令,初始化一个package.json
的配置文件,否则包无法安装到本地项目中;npm i 包名 --save
即可安装本地包;都安装到了当前项目的 node_modules
目录下;
--save
命令,如果用的是 npm 3.x 的版本,则需要手动指定 --save
;package-lock.json
文件中记录了曾经装过的包的下载地址,方便下次直接下载包,能够加快装包的速度,提升装包的体验;npm uninstall/remove 包名 -S/-D
即可卸载指定的本地包;--save
的缩写是 -S
--save-dev
的缩写是 -D
install
的缩写是 i
dependencies
节点,表示项目上线部署时候需要的依赖项;devDependencies
节点,表示项目在开发阶段需要的依赖项,但是当项目要部署上线了,devDependencies
节点中的包,就不再需要了!npm i
快速装包的时候,npm会检查package.json
文件中,所有的依赖项,然后都为我们安装到项目中--production
表示只安装 dependencies
节点下,记录的包,不安装devDependencies
节点下的包;当项目要上线了,才会使用--production
命令cnpm
cnpm
:运行 npm i cnpm -g
即可;cnpm
:在装包的时候,只需要把 npm
替换成 cnpm
即可,例如:
npm
安装 jquery
:运行 npm i jquery -S
cnpm
安装 jquery
: 运行 cnpm i jquery -S
什么是B/S:特指基于 浏览器(Browser) 和 服务器(Server) 这种交互形式;
请求 - 处理 - 响应
的过程;
使用
http
核心模块,创建最基本的web服务器
创建最基本的web服务器
const server = http.createServer()
创建服务器;server.on('request', function(req, res) { 请求的处理函数 })
绑定事件 并 指定 处理函数;server.listen(端口, IP地址, 启动成功的回调函数)
来启动服务器;防止响应内容中文乱码问题
通过 设置响应报文头的 Content-Type
,来指定响应内容的编码类型,从而防止乱码:
res.writeHeader(200, {
'Content-Type': 'text/plain; charset=utf-8'
})
根据不同的URL返回不同的文本内容
req.url
获取客户端请求的URL地址根据不同的URL返回不同的HTML页面
fs 模块
读取URL对应的HTML页面内容,并使用 res.end()
响应给客户端即可;处理并返回css样式表
处理并返回Javascript文件
优化
calc
计算器包,并尝试向 calc
包中,添加 mod 求余数的方法类似于Apache的静态资源服务器
Sign in for post a comment
Comment ( 0 )