NODE基础(五)
来源:互联网 发布:学编程的游戏 ios 编辑:程序博客网 时间:2024/06/05 10:43
复习
- 异步究竟用在了哪里?
- rs.readFile();//node中文件操作 都有一半是异步的
- 访问数据库也是异步的
- 用户通过浏览器访问一个网站,数据的输出(请求),浏览器看到了首页的样子(服务器对我们的输入)响应
- nodejs :建议我们多使用异步
“
fs.readFileSync();//5秒 + 2秒小猪等待和询问(节约的如何检测文件读写完毕的机制时间)
//后续操作5秒打妖怪
….
10秒
fs.readFile(); //;立刻执行后续代码
5秒打妖怪
主线程程序结束以后
还是要读文件,可能花上5秒时间
“
- node异步处理就是遇到一个异步代码就从线程池中拿出一个线程,直到执行完毕,放回线程池
- 主线程在执行完你所能看到的代码后,继续执行异步操作中的回调函数
- npm nrm 找不到路命令
- npm init/install/uninstall/docs
- nrm nodejs中的3M
- nvm node版本管理工具(绿色版)
- nvm :
- 安装 nvm install 5.11.0 [系统位数] 或者install 5.11 后面版本号自动匹配
- 卸载 nvm uninstall
- 查看 nvm ls
- 切换 nvm use 版本号
- npm(根据node具体版本来兼容) npm 3.0以后,安装包的目录编程了全部都在一级目录,为的是共享依赖包
- npm init/install/uninstall/docs
- nrm 切换和管理npm镜像源的工具
- 查看 nrm ls
- 切换 nrm use 镜像源别名
- try catch
try{
code1:JSON.parse('dasdsad');... //如果code1出现异常,code2执行吗?不执行,直接进入catch块
**Syntax Error** if(正则匹配不符合){ throw new SyntaxError(); }
**BadMan Error** if(badMan){ throw new BadMadError(); }
code2...
code3...
}catch(e){
code4...
//如果不是我预期的异常,我就在这里throw
}
异步
- 异步带来了什么问题?
- 异步操作执行结束时机无法获知
- 只要包含异步操作的代码异常无法捕获
- 异步操作无法return
回调
- 当异步内操作完毕调用回调函数,获知异步内操作结束时机(保障程序的执行顺序)
- 当异步内操作完毕后,调用回调函数,将返回值作为参数传递
- 异常对象和数据对象都可以作为回调函数的参数传递
- 在外部无法根据一个参数来判断,所以我们需要多个参数
- nodejs建议回调函数参数列表:错误优先,函数的参数:回调函数最后
- fs.readFile(path,xxx,function(){})
path 路径处理模块
- path 管不管文件存在? 不管,只操作字符串路径的解析
- join 可以矫正输入错误的路径
path.substr(path.lastIndexOf('/'),path.length-1);//大家好
所有的代码实现:基于需求,使用人群
path核心对象提供给:后端开发人员,全站开发
- basename(p[, ext]) 获取路径的文件名称-->和parse对象的base
- dirname(p) 获取的是目录路径,不包含文件名称 --> 和parse对象的dir一致
- extname(p) 获取的是路径的后缀名 .txt -->parse对象的ext属性一致
- join([path1][, path2][, ...]) **会去自动的矫正路径,比如多个/ /也能解析**
- parse(path) //根据路径去解析一个对象
{ root: ‘C:/’,
dir: ‘C:/大家好///你好//’,
base: ‘好dodo.txt’,
ext: ‘.txt’,
name: ‘好dodo’ }
- format(pathObject) //根据路径对象解析成路径字符串 根据属性来做dir,base,
滚动歌词案例
- 1:引入文件对象
- 2:读取歌词文件 ——->整个文件字符串
- 3:切割文件 \r\n –> 获取一个数组,一行一行的字符串
- 4:遍历数组
- 5: 一行数据、 正则匹配:凡是我们需要匹配的原封不动给\ ,我们需要拿到的数据,分组
- 6: 执行正则,获取数组,arr[0] 元素我们不需要
- 7: 计算时间,arr[1]~arr[4], 毫秒值是不被计算的情况,担心他本身是一个字符串,用加号连接会出问题
- 8: 通过定时器调用
- 9: 在定时器内输出内容
ES6
webStorm:ES6–>设置–>语言和框架–>JavaScript–>下拉菜单ES6
* chrome对ES6的支持非常好,基于V8的node完全不是问题
* ES6的初衷是为了让js语言更加健壮、完善,更为适合大型应用的开发
- use strict 严格模式
- 旨在消除一些不严谨,不合理的语法问题
- 严格模式要求先声明后使用
let关键字
- 案例演示
- let重复声明和var重复声明的区别
- let是块级作用域,不会提升成全局变量
- 块级作用域,首选遵循就近原则,如果当前有,就使用,
- 否则就到更大的作用域中查找
- 使用方式
- 不允许重复声明
- let是块级作用域,不会提升成全局变量
- 块级作用域,首选遵循就近原则,如果当前有
- 就使用,否则就到更大的作用域中查找 ,块级指的就是{}
- 如果不在可见的{}内,那么就是在整个模块内
const关键字
- 注意:
- 也是块级作用域
- 先完成初始化(声明并赋值)才能使用
- 只能被赋值一次
- 可以对属性修改,不能直接修改指向(=)
- 应用场景
- 画球声明PI
- 1024 在我们认为的1024是1M 转换单位,更久不变
- 硬盘厂商就是1000的常量
- 值和引用的问题
- 只有= 才叫赋值。。对象=值,将这个值赋给这个对象,此时指向已经改变
- 对象.属性 = 值,对象原来指向不变,对象中的属性发生改变。const 可以这样
拼接(模板)字符串及相关函数
- 使用方式:
- 通过反引号(tab上面的键)包裹的字符串
- 可以接受换行
- 可以嵌入变量
- String.raw“
ES6:新增函数* 字符串4: 字符串对象A.includes(字符串对象B) 判断是否包含 返回boolean 字符串对象A.startsWith(字符串对象B) 判断是否以b开头 返回Bool 字符串对象A.endsWith(字符串对象B) 判断是否以b结尾 返回Bool 字符串对象A.repeat(x次数) 重复输出a字符串x次* Math Math.trunc(1.1) //截取整数位* 数组Array Array.from({'1':'abc','0':'des',length:2}) 通过对象创建数组 Array.of(1,2,3,4); * 数组查找元素 数组.find(function(num,index,arr){ return num == 1; })* 数组查找下标数组.findIndex(function(num,index,arr){ return num == 1; })
箭头函数
- 使用方式
- 没有参数
- let func = ()=> 1;
- 多个参数
- let func = (n1,n2)=>n1+n2;
- 多行代码
- let func = (n1,n2)=>{ code…}
- 箭头函数中的this只绑定声明时的对象,而不是调用时的对象,this不再多变
- 箭头函数没有arguments
- 箭头函数不能做构造函数
- 应用场景:匿名函数作为参数来传递
文件IO
二进制数据
- 二进制
- 字节 计算机存储数据我们可见的最小单位
- 对于文本数据,计算机会保存文本内容码表对应的位置值,显示的时候就根据码表对应的位置值找到该字符 ,例:文本中a 对应计算机内的97 a:97 A:65 0:48
Buffer
字符串转Buffer
- 早期可以使用 new Buffer的方式,现在nodejs不建议,已是过时的方法
- 创建:Buffer.from(数组、字符串、数字); //nodejs 需要 v5.10.0以后的版本
Buffer 转字符串
- toString([endecoing][,offset][,end]);//如果需要制定从那一部分开始转换字符串,就需要给定编码
- 在nodejs中encoding默认是utf8
- 在utf8中,一个中文是三个字节
write函数
- 向buf中写入数据
- buf.write(string, [offset起始], [length长度], [encoding编码])
文件操作
读写文件
- 在fs核心模块中,对所有文件操作都提供了同步和异步版本
- 如果给定编码,拿到的是字符串。
- 默认是utf8,其他地方utf-8
- 写入文件:文件不存在,自动创建文件,创建文件的时候,会将文件内容清空,如果希望追加数据可以传入 options对象
let options = {encoding:'utf8',flag:'a',autoclose:true}; //a表示append,autoclose表示出现异常或者结束之后自动关闭资源连接
fs.writeFile(path路径,data数据,[options可选对象],callback);
//第二种方式追加
appendFile(path,data,options,callback(err){})
图片加密
- 加密解密原理
- 异或运算,一个数被同一个数异或两次就是他本身
- 异或运算符 是^:shift + 6
文件相关操作
在操作一个文件之前可能需要判断文件是否存在 fs.exits(); //过时了fs.stat(path,callback(err,stats))fs.Stats对象stats.isFile() //返回bool,判断是否是文件stats.isDirectory() //返回bool,判断是否是文件夹fs.readdir(path, callback(err,files))// 需求: 通过一个路径,做一个遍历文件名fs.rename(oldPath,newPath,callback) 移动文件(重命名)
state状态说明
size 文件的大小mtime 修改的时间birthtime 创建时间
目录相关操作
读取一个目录
fs.readdir(path,callback(err,files))
监视文件变化:
fs.watchFile(filename[, options], listener(curr,prev))
options:{persistent,interval}
fs.watch(filename[,options][,listener])
* 目前比较流行的文件监视
npm install chokidar
chokidar.watch(文件路径, ).on('all', (event, path) => {
console.log(event, path);
});
API application programming Interface 应用程序编程接口
如果使用,API: 使用说明说
案例:利用监视文件功能实现一个markdown文件转换器
- 文件监视 chokidar
- md转html markdown-it
- 路径的转换 path
- 模板来转换,添加body
- browser-sync start –server –files ./node_05.html 实现实时刷新
FS总结
- 掌握读和写文件就ok
ES6总结
- 让JavaScript更加完善,更加健壮,更适合更大型应用的开发
- 对于严格模式(use strict)
- 旨在消除一些怪异、不符合逻辑的代码,比如未声明就使用
- let
- 块级作用域,不存在变量类型提升,块指的是{},代码内部没有{}。代表就是模块的作用域
- 如果该对应被其他模块引入 根据其他模块的声明情况来看 let xx =require(‘xx’);
- 不能重复的声明
- 查找机制–>就近原则
- const
- 应用场景基于更久不变的数值,核心对象或者第三方包对象
- 块级作用域
- 必须先完成初始化 声明+ 赋值,再使用
- 不可以被二次赋值,可以修改属性值
- 模板字符串
- 可以包含换行
- 可以嵌入变量
- 扩展函数
- startsWith/endsWith/数组对象.findIndex/数组对象.find/Math.trunc
- 箭头函数
- 箭头函数的this不再多变,绑定的是声明时所在的对象,不再是调用时所在的对象
- 箭头函数没有arguments
- 不能当做构造函数使用
- 作为匿名函数参数的传递
- NODE基础(五)
- 微信小程序 Node.js (基础五) EventEmitter
- node.js学习(五、基础js语法)
- node笔记---node基础
- node基础
- node基础
- Node学习笔记(五)
- (五)Sprite Node
- [NODE之五]Buffer1
- node入门(五)
- 【Node.js基础篇】(五)使用mime模块来响应css、js文件的请求
- 自学Node.js 五:学习node-formidable
- 基础五
- node源码详解(五)
- node.js基础语法
- node测试基础
- node测试基础
- 20150815 Node.js基础
- SQL语句 第一节(了解数据库)
- 重新认识java(七) ---- final 关键字
- virtualbox 获取COM失败的方法
- gdb调试命令笔记
- Android--计算器
- NODE基础(五)
- Android Scroller完全解析
- 安装openssl-devel命令
- 【2016.9-2017.2】年终总结——扬帆起航
- 开学啦
- nginx虚拟主机
- UVa 11054 Wine trading in Gergovia
- CSS3阴影 box-shadow的使用和技巧总结
- NODE基础(六)