NODE基础(六)

来源:互联网 发布:钓鱼网站源码 编辑:程序博客网 时间:2024/06/06 17:23

ES6

  • 严格模式
    • use strict 必须先声明后使用
  • let
    • 块级作用域 变量当前声明所在的{} ,没有{}就是模块的作用域,相比var不存在变量类型提升
    • 查找机制:就近原则,如果当前{}内有声明,直接使用,没有声明,向上级作用域查找
    • 不能重复声明
  • const
    • 块级作用域
    • 使用方式: 首先完成初始化,声明并且赋值
    • 不能二次赋值,直接用等号=赋值该对象,用该对象.属性=值,修改对象的属性值
  • 模板字符串
    • 能够包含换行
    • 能够嵌入变量
    • 原生字符串:String.rawhello\r\nworld 只有模板字符串能这么玩
  • 扩展函数
    • Math.truc 截取整数部分
    • 数组.find(function(ele,index,数组对象){})
    • 数组.findIndex(function(ele,index,数组对象){})//查找数组元素下标
    • 字符串对象.startsWith(‘xxx’);//判断是否以xxx开头
    • 字符串对象.endsWith(‘xxx’);
  • 箭头函数
    • function(){}
    • ()=>{} //如果不是多行,可以省略{}
    • 箭头函数的this不再多变,绑定声明时所在的对象
    • 箭头函数没有arguments

FS核心对象

  • path对象
    • path.basename();//文件名称
    • path.dirname();//目录名称
    • path.extname();//获取后缀名 .txt
    • basename + dirname = 绝对路径
    • path.join(过个参数path); //拼接路径并且矫正不合法的路径写法,返回路径字符串
    • path.parse(path);//解析路径字符串返回路径对象,修改base属性,名称及可以改变
    • path.format(obj);//格式化一个对象成为路径字符串
  • fs.readFile(path路径,options对象||’utf8’,(err,data)=>{});//读取文件
  • fs.writeFile(path路径,data数据,options,(err)=>{}); //flag :’a’追加
  • fs.appendFile(path路径,data数据,(err)=>{});//文件追加
  • fs.stat(path路径,(err,stats)=>{});//获取文件信息对象
    • stats.isFile()/isDirectory()目录/size文件大小/mtime修改时间/birthtime创建时间/
  • fs.readdir(path,(err,files)=>{})//读取目录

文件的监视

  • 早期nodejs的fs核心模块对于监视文件有一系列问题
    • mac系统上出现report功能不兼容
    • 占用CUP高,会让内存暴增
    • 会出现两次监视
    • 子文件夹监视不能实现
  • fs.watch(filename[, options][, listener]) 监视文件改动
  • chokidar 解决原生fs模块存在的问题
  • 小补充
    • num => num; //看得懂就可以了,一个形参可以省略括号
    • (num1,num2) => 1;

  • 可以读取的内容最大是2G
  • 原本nodejs中读取文件依据的是有多大文件,就创建多大的缓冲区buf
    • 过大的文件会造成内存溢出
  • nodejs提供了一种操作流的方式,内部默认的缓冲区大小是65536byte
    • 我们通过事件(IO操作是异步的)的机制,注册了一个当流中有数据的回调
    • 如果有数据,我们通过对应形参data拿到数据在nodejs内存中,直接向输出流内写入,最终写入到文件
    • rs.pipe(ws); 实际上省略了API相关的操作,原理上IO的读写是不变的,
    • 我们直接将读取的数据通过Pipe,直接建立一个管道,从输入流直接流向输出流(还是基于Nodejs)
  • 默认我们读取文件IO,是一个字节一个字节的读取,这样效率太低,来回访问次数过多
  • 对于读取大文件,创建一个缓冲区(篮子),通过篮子减少来回访问的次数,提高效率
  • pipe 实际上节约的API繁琐的操作,仍然有缓冲区
  • 流对象.pipe(流对象) rs.pipe(ws);

http

  • http是一种协议,数据格式的约束
    • 协议:约束多方,遵守规定,完成更好的协议(客户端–服务器)
  • 一问一答,有问才有答
  • 五大特点
    • 支持客户端、服务器架构
    • 简单
    • 灵活
    • 无状态 服务器不会去记录用户上次访问的 cookie session来解决
    • 无连接 服务器不会为客户端hold住连接,请求过来建立连接,请求结束,关闭连接
    • http1.1 会对一个客户端来的请求hold住连接,这样可以存在一次开启,多次请求

socket

  • 一台计算机中有65536个端口 –> 如果有一个程序,使用一个端口
  • 通过IP能找到计算机,通过端口找到对应的程序
  • Socket 套接字,是一个网络连接对象
    • socket = IP + 端口

http核心模块相关对象

  • 服务器对象 server
    • let server =http.creatServer(linsener);
  • 客户端对象 client
    • let client = http.request();
  • 请求对象 request
    • 封装了一些请求相关的数据
  • 响应对象 response
    • 封装了服务器向客户端返回数据的功能

http基本使用(连接事件)

  • 127.0.0.1 本地回环地址,也就是找到自己,localhost
  • 关于端口,我们尽量选择1024以上的,1024以内可能已经被占用了,有些是一些系统程序
  • 最终不要超过65535
事件 : 'request'let server = http.createServer([requestListener])  server.listen(port, [hostname], [backlog], [callback]) * 案例演示: 多人连接服务器,连接成功打印数据

获取数据(request)

request.method request.url request.headers 
  • http 请求报文数据
    • 请求首行:请求方式 请求url http版本
    • connection: ‘keep-alive’ 由于http1.1协议,浏览器默认加上了该字段,表示支持长连接
    • user-agent 判断访问服务器的设备类型,企业中根据类型做适配
    • accept 支持的文件类型
    • accept-encoding’: ‘gzip, deflate, sdch’ 告知服务器,本浏览器支持什么压缩方式
  • 案例演示: 获取请求数据

http数据交互(response)

response.setHeader(name, value)response.writeHead(statusCode,  [headers])response.write(chunk, [encoding])response.end([data], [encoding])
  • 案例演示: 将数据显示在页面

小补充

npm i -g nodemon
启动: nodemon app.js

服务器响应浏览器状态码:  1开头 ---正在执行  2开头 ---执行成功  3:开头---重定向(转移资源)    301 永久重定向    302 临时重定向  4开头: 客户端出现的异常  5开头:服务端的异常
  • http.STATUS_CODES
  • URL完整形式
    • URL和URI
    • 完整的URL:协议(http):// 域名(www.itcast.com) 端口(:8080) / 路径资源(/question) 锚点(#abc) 查询字符串(?wd=知乎)
    • 不完成的URL我们统称为URI,URI范围更广泛,只有严格的URL形式,才算是URL

在地址栏输入网址后页面是如何呈现的?

  • Alt

response要注意的问题

  • Can’t set headers after they are sent.(设置了头以后又发送了信息)
  • 解决通知浏览器以什么文件方式解析
    • res.writeHead(200,{‘content-type’:’text/html’});
  • 解决中文乱码
    • res.writeHead(200,{‘content-type’:’text/html;charset=utf-8’});

三次握手和四次挥手(TCP)

Alt

  • SYN(synchronous) 建立联机
  • ACK(acknowledment) 确认 建立连接(分配连接的资源)
  • FIN(finish)结束
  • ACK(acknowledment) 确认

netstat /nao 打印出正在监听的端口。

通过url及请求方式返回静态资源

base64编码图片

转发和重定向

文本类型

聊天室案例

  • 案例演示: 基于浏览器的聊天
0 0