目录
全局对象
1.global对象
用来检测是否为全局,JS下global名称为window
一个js文件在Node.js下是在一个独立的作用域; 一个js文件在JS下是在全局作用域下 |
2.console对象
console.log(1); //打印日志
console.info(2); //打印消息
console.warn(3); //打印警告
console.error(4); //打印错误
console.time() //开始计时
console.timeEnd() //结束计时
注意事项:开始计时和结束计时的值要保持一致
3.Buffer对象
缓冲区:是内存中用于临时存储数据的区域
var buf=Buffer.alloc(5,'abcde'); //创建Buffer,分配内存空间为5个字节,并存储字符,每个中文字符占3个字节 buf.toString() //将Buffer数据转为字符串 |
模块系统
模块:代表的是一个功能体,每个文件就是一个模块
module.exports:暴露的对象,默认是一个空对象
require():是一个函数,用于引入其它的模块,回到暴露的对象
__dirname 当前模块的绝对路径
__filename 当前模块的绝对路径+模块名称
模块分类
分为自定义模块、核心模块、第三方模块
以路径开头 | 不以路径开头 | |
文件模块 | require('./circle.js') 用于引入自定义模块 | |
目录模块 | require('./02_tao') 找到目录后,会到目录下找package.json文件中main对应的文件,如果找不到会自动找index.js | require('tao') 用于引入第三方模块 会自动到当前目录下的node_modules目录中寻找tao目录,找不到会一直往上一级目录的node_modules目录寻找 |
包和npm
包(package):就是指第三方模块
npm:是一个工具模块,用来管理第三方模块的,会在Node.js安装的时候附带安装 npm -v
CommonJS:是一种模块化规范,Node.js采用这种规范,例如引入、暴露都是基于这个规范。
第三方模块网址:www.npmjs.com
常用的npm命令
npm init -y 初始化生成一个package.json文件,作为项目描述文件,可以记录下载安装的包
npm install 包名称 下载安装指定的包,将下载的包自动放入到node_modules目录,如果node_modules目录不存在会自动创建;在package.json中记录下载安装的包;生成package-lock.json文件,记录所有包的版本。
npm install 自动下载安装package.json和package-lock.json中记录的包
其它npm命令: www.npmjs.cn
查询字符串模块(querystring)
查询字符串:是浏览器端向服务器传递参数的一种形式,位于网址中
http://www.codeboy.com:9999/product.html?kw=戴尔&a=1
查询字符串模块用于操作查询字符串的工具模块
parse() 将查询字符串转换为对象,获取参数值
网址(URL)
URL:统一资源定位,互联网上的任何资源(html,css,js,图片)都有对应URL,用来访问该资源。
http://www.codeboy.com:9999/product_details.html?lid=5
协议 域名/IP地址 端口 请求的服务器端资源 查询字符串
new URL( ) 将一个URL转为对象,可以获取各个部分
定时器
提供一组定时器相关的函数
1.一次性定时器
开启 var timer=setTimeout(回调函数, 间隔时间) 当间隔时间到了,会调用一次回调函数。 |
清除 clearTimeout(timer) |
2.周期性定时器
开启 var timer=setInterval(回调函数, 间隔时间) 每隔一段时间,调用一次回调函数 |
清除 clearInterval(timer) |
3.立即执行定时器
开启 var timer=setImmediate(回调函数) |
清除 clearImmediate(timer) |
说明:所有的定时器中的回调函数都是在事件队列中执行。
4.立即执行定时器
process.nextTick()
文件系统模块
用于文件操作
文件分为目录形式和文件形式
1.查看文件的状态
statSync(文件的路径)/stat(文件的路径, 回调函数)
isDirectory() 是否为目录
isFile() 是否为文件
2.创建目录
mkdirSync(目录的路径) / mkdir(目录的路径, 回调函数)
3.移除目录
rmdirSync(目录的路径) / rmdir(目录的路径, 回调函数)
只能移除空目录
4.读取目录
readdirSync(目录的路径) / readdir(目录的路径, 回调函数)
5.清空写入文件
writeFileSync(文件的路径, 写入的数据) / writeFile(文件的路径, 写入的数据, 回调函数)
如果文件不存在,会先创建文件然后写入
如果文件已经存在,会清空内容然后写入
6.追加写入
appendFileSync(文件的路径, 写入的数据)/appendFile(文件的路径, 写入的数据, 回调函数)
如果文件不存在,会先创建文件然后写入
如果文件已经存在,会在末尾追加写入
7.读取文件
readFileSync(文件的路径) / readFile(文件的路径, 回调函数)
8.删除文件
unlinkSync(文件的路径) / unlink(文件的路径, 回调函数)
9.检测文件(目录)是否存在
existsSync(文件路径)
只有同步一种方法,返回布尔型的值
http模块
可以用来创建WEB服务器
createServer() 创建WEB服务器
listen() 设置端口
res 响应对象
res.statusCode 设置响应的状态码
req 请求对象
req.url 获取请求的服务器端资源 格式 '/a'
req.method 获取请求的方法
通过事件接收请求并作出响应 on('request', (req,res)=>{ req 请求的对象 res 响应的对象 res.setHeader() 设置响应的头信息 res.write() 设置响应到浏览器的内容 res.end() 结束并发送响应 }); |
同步和异步
同步:是在主程序中执行,会阻止后边代码的执行,通过返回值获取结果
异步:是在一个独立的线程执行,不会阻止主程序后续代码执行,通过回调函数获取结果
文件流
createReadStream(文件的路径) 创建可读取的文件流,分段读取文件
createWriteStream(文件的路径) 创建可写入的文件流,会创建文件
pipe() 管道,通过管道可以将读取的流添加到写入的流,完成文件的拷贝
on('事件名称', 回调函数) 添加事件,监听某一个动作,会自动调用回调函数;事件名称是固定的字符串。
http协议
超文本传输协议
是客户端和WEB服务器端之间的通信协议
1.通用头信息(general)
Request URL:请求的URL,要请求的资源
Request Method:请求的方法,对资源的操作方式,get/post..
Status Code:响应的状态码,请求的结果
1**:接收到了请求,还没有结束响应
2**:成功的响应
3**:响应的重定向,发生跳转
4**:客户端错误
5**:服务器错误
2.响应头信息(response)
Location:设置要跳转的URL,通常配合3**使用
Content-Type:设置响应的内容类型,中文乱码解决(text/html;charset=utf-8)
3.请求头信息(request)
express框架
基于Node.js平台,快速、开放、极简的WEB开发框架。
网址:www.expressjs.com.cn
express是第三方模块,需要先去下载安装才能使用
npm install express
创建WEB服务器
const express=require('express'); //引入express模块 const app=express(); //创建WEB服务器 app.listen(8080); //设置端口 |
路由
用来处理特定的请求,路由中包含三部分:请求的URL,请求的方法,回调函数
res 响应的对象
res.send() 设置响应的内容并发送
res.redirect() 设置响应的重定向并发送
res.sendFile() 设置响应的文件并发送,使用绝对路径 __dirname
req 请求的对象
req.url 获取请求的URL
req.method 获取请求的方法
req.query 获取get传递的参数,格式为对象
传参方式 | 格式 | 路由获取 |
get方式 | http://127.0.0.1:8080/mysearch?kw=手机 | req.query {kw: '手机'} |
路由传参 | http://127.0.0.1:8080/package/手机 | req.params 需要路由中设置参数名 例如:pname {pname: '手机'} |
传参方式 | 格式 | 路由获取 |
post传递 | URL中不可见 | req.on('data',(c)=>{ c 获取的数据,格式为buffer,需要转字符串,转后为查询字符串,还需要进一步转为对象 }) |
路由器
路由器用来管理路由,将同一个模块下的路由统一管理;可以给路由器下所有路由添加同一个的前缀,防止URL相同
路由器 //1.创建路由器对象 const r=express.Router(); //2.添加路由 //3.暴露路由器对象 module.exports=r; |
WEB服务器 //1.引入路由器 //2.使用路由器,将所有路由器下的路由挂在到WEB服务器下,同时添加前缀 app.use( 添加的前缀,引入的路由器 ) |
中间件
用于拦截对服务器的请求
中间件分为应用级中间件、路由级中间件、内置中间件、第三方中间件、错误处理中间件
1.应用级中间件
是一个函数,一旦拦截到自动调用这个函数
函数(req,res,next) //next() 往后执行,可能是下一个中间件或者路由
app.use( 拦截的URL, 函数 )
2.路由级中间件
就是路由器的使用
当拦截到以后到指定的路由器下寻找路由
3.内置中间件
(1)托管静态资源
客户端请求静态资源(html、css、js、图像...),不需要通过路由去响应,而是自动的到指定的目录查找。
app.use( express.static('要托管的目录') )
(2)将post传递参数转为对象
app.use( express.urlencoded({ extended:false //内部如何转为对象 }) ) |
req.body //路由中获取对象 |
接口(API)
服务器提供的动态资源(和数据库相关的)
RESTful接口
是一种接口的规范
1.接口的地址
http://127.0.0.1:8080/v1/emps
版本号 资源名称(复数)
http://127.0.0.1:8080/v1/users/login
对资源具体描述
2.请求方式
对资源的操作方式
get 获取资源(查询资源)
post 新建资源(插入数据)
delete 删除资源(删除数据)
put 修改资源(修改数据)
3.过滤数据(传参)
操作一个资源(使用路由传参)
http://127.0.0.1:8080/v1/emps/5
过滤数据(使用get传参)
分页查询
http://127.0.0.1:8080/v1/emps?pno=1&count=10
页码 每页数据量
搜索
http://127.0.0.1:8080/v1/emps?user=tao
修改资源和新建资源(post传参)
4.返回结果
json:是一种字符串形式的对象,是一种数据格式
通常包含状态码、消息、数据
' {"code":200, "msg":"查询成功", "data":[ ...] } '
' {"code":200, "msg":"登录成功"} '