- 上午
- JavaScript 在浏览器中和node平台中的区别
- 没有了DOM和BOM –> 没有了document和window
- node是什么?
- 平台 = 后台语言(CommonJS = 接受请求 + 处理文件.. + 模块定义(Modules)) + 服务器
- Modules 和 CMD 本身就差不多
- JavaScript 在浏览器中和node平台中的区别
- 下午
- 环境变量
- 命令行…很多程序的启动都需要读取环境变量中的值
- 方式1: 在系统变量的Path中配置。一个路径–> 系统会读取这个路径,找到对应的可执行文件或者批处理文件
- 方式2:
- 定义一个变量 例NODE_PATH 值:D:/xxx/xx
- 使用这个变量 %变量名称%
- win7中每个path中的路径以;分隔
- nvm(推荐的就是先安装nvm 再通过nvm来安装node)
- nvm version 查看版本
- nvm install 版本号(5.2自动补全具体版本) [系统位数]
- nvm uninstall 版本号 [系统位数]
- nvm list(ls) 查看版本,* 代表当前使用的版本
- nvm use 版本号 切换版本
- node绿色版
- 去到官方网站上安装对应的node.exe 和 npm(已知node对应npm版本后,还要去找Npm)
- 直接安装包含着node和npm的安装包
- 修改安装后的目录名称 让安装无法删除之前的版本
- 安装新的版本(先安装了7.0.0 只能从老版本安装到更新的版本)
- 3 天
- 环境变量
- process对象 属性和方法
- 属性 pid,env,argv(开发命令行工具)
- stdin、stdout、stderr
- 标准的(输入)流 流进内存是二进制数据
- 模块的加载机制 ./cal
- 2:文件 当前目录下cal.js/json/node
- 3:文件夹 文件夹下的index.js
- 1:包 逐级向上查找node_modeles/第三方包名目录 package.json –> main属性
- npm使用
- 初始化package.json文件 npm init [-y]
- 查看文档 npm docs 第三方包名
- 安装包 npm install(i) 包名 [–save]这个属性会影响dependecies 的值
- 卸载 npm uninstall 包名 [–save] 这个属性会删除dependecies 依赖
- 以上操作是针对与你的项目,安装的保存路径就是项目下,如果没有package.json文件,并且你该项目的路径上级目录还有Node_module文件夹,直接给过去了(你没有package.json)
- 全局安装
- npm -g i browser-sync
- 全局命令行工具安装不会根据你当前打开的目录来,而是根据npm root -g来安装
- 修改全局安装路径
- 修改全局命令行工具存储路径 npm config set prefix “D:/dev/node/global”
- 设置环境变量用户paht 给值D:/dev/node/global
- 重启命令行
- 第三方包的介绍 browser-sync moment showdown(md转换html)
- browser-sync 默认认为你访问的路径,补上index.html 是首页
- 例如 打开以后 http://localhost:3000/index.html 如果没有,我们可以指定一个别的文件,注意:要在当前的文件夹或者文件夹以下,不能以上。
- browser-sync 默认认为你访问的路径,补上index.html 是首页
npm 被墙的问题
- npm 默认下载的资源 –> npmjs的官方源
- npm install jquery –registery http://register.npm…
NRM
- NPM的镜像源管理工具(选择NPM的供货商)
- 配置公司内网私有镜像源
- 安装 npm i -global(g) nrm
- 查看当前有哪些可选的镜像源 nrm ls 显示 星号 代表当前所使用的源
- 已经提供了足够我们使用的源,直接切换即可 nrm use 源的别名
- 安装公司私有镜像源
- 配置源地址 nrm add 镜像源别名 镜像源地址 http/https://192.168.28.1
- 如果没有给定端口,默认是80端口 http协议 ,https默认443
- 切换源 nrm use 镜像源别名
- 使用npm下载–>此时下载的源就是你配置的nrm中正在使用的源
异步
- 需求:一个异步的吃饭睡觉打豆豆案例,保障其能顺序执行
- 总结异步与同步特点:
- 同步:当前代码不执行完毕,后续代码不执行
- 异步:不阻塞后续代码执行,待当前同步代码都执行完毕,再来执行异步代码
- 异步的顺序如何保障?
- 在异步代码内部,操作结束以后,做一些操作
- 最终通过在异步内加入操作(函数的调用),获取到异步内操作执行结束时机
回调
需求:宝宝迷路了案例,通过异步操作的值实现返回
总结
- 回调包含的信息有哪些?
- 获知异步内代码执行结束的时机
- 通过传入的函数,随着函数的调用,获取了返回值对象
- 包含异常对象
- 匿名函数应用场景?
- 只使用一次的时候
- 作为参数传递
异步异常
- 需求:宝宝成人了,字符串在异步内经过转换,如果产生异常,处理异常
- 注意点:
- 只要是包含异步代码的部分,异常无法捕获
- 如果你try的部分包含异步代码,无法捕获异常
- 进入到异步代码回调函数的内部,直接try不包含任何异步代码的同步代码
- 在nodejs中回调函数的参数列表默认规定错误对象优先,来判断到底有没有出异常
- nodejs中要求函数的参数,回调函数最后
fs.readFile('./a.txt',function(err,data){ //回调函数在参数中是最后
//回调函数的参数列表要求:错误优先
if(err){
throw err;
}
})
异常处理
- try-catch 能够自己处理的异常,自己处理
- throw 自己处理不了的异常,抛给上级处理
- 后端开发套路:处理的了,自己处理,处理不了,往上抛
- 前端尽量try
自定义异常(扩展)
- 自定义: 创建一个类,构造的时候添加堆栈信息追踪,使得可以获取到报错信息行数
- 在外部我们再根据异常的类型名称来判断其类型,做对应的处理
IO
- I input输入
- O output输出
- IO称之为一次数据输入与输出之间的移动
理解IO不可预测性
- nodejs中根据原来JavaScript基于事件的方式,直接引入进来,为了解决不可预测(守株待兔)
- 解析DNS的请求时间
- 服务器繁忙程度
- 要应答的数据有多大
- 服务器和客户的可用带宽
- 为响应服务的软件的效率
- 所使用的网络的繁忙的程度
- 数据要传输多远
并发的含义
- 多人同时尝试着做同样的事情
线程和进程
- 一个应用:至少有一个进程,有多个进程就是(多进程)
- 一个进程:至少有一个线程,有多个线程就是(多线程)
- 线程才是真正干活
非阻塞IO模型
- 多线程模型
- 并不会一味的去增加线程来完成服务,而是选取了一个适当点,来维持服务
- 仍然会造成用户的等待
- 需要反复轮询是否结束
- 非阻塞IO模型
- 等待时间大大缩短,分工合作(接收数据的服务员和处理网络IO的厨师)
- 我们在点餐以后,将对应的响应方式告知了服务员,由原来的主动询问改为了服务员通过该方式主动通知我们
- 节省了反复询问”好了没有”的时间效率,从而可以先完成别的事情
异步与非阻塞的区别
- 异步是一种通信机制:
- 同步通信机制,消息是由调用者来主动轮询获取的
- 异步通信机制,消息由被调者主动通知调用者
- libuv 中间层 –>调用底层硬件
- 根据当前的系统来判断如何调用底层线程池
- 在windows中 实现异步的是AOCP 系统底层的
- 在linux中,以前是他的线程池, 在node 0.9.3,nodejs模仿着AOCP实现了自己的线程池
- 非阻塞 是一种描述
- 不阻塞后续代码执行
- 等待当前代码执行完毕,才能执行后续代码
复习
- NRM的使用
- 异步带来的问题
- 无法获知执行结束
- 无法返回对象
- 通过回调函数解决
- 错误优先,回调函数最后
- 异常处理:
- 能try、try,不能try 抛throw
bower下载前端第三方包
- 前端包与包之前会产生依赖
- npm不会管理对应依赖的下载
- bower下载的时候会帮我们分析依赖项,并且下载
- npm逐渐取到bower
- 暂时还不存在
- 作为前端包可以通过bower单独管理
- 后端nodejs 单独使用npm就可以了
- 使用:
- 0: 安装bower npm install -g bower
- 1:初始化 bower init 创建bower.json文件
- 2: 安装bower install bootstrap underscore [–save]
- 3:卸载bower uninstall bootstrap [–save]
- 安装的路径是当前项目下的bower_components,存在bower.json文件