NODE基础(四)

来源:互联网 发布:学编程的游戏 ios 编辑:程序博客网 时间:2024/05/29 18:34
  • 上午
    • JavaScript 在浏览器中和node平台中的区别
      • 没有了DOM和BOM –> 没有了document和window
    • node是什么?
      • 平台 = 后台语言(CommonJS = 接受请求 + 处理文件.. + 模块定义(Modules)) + 服务器
      • Modules 和 CMD 本身就差不多
  • 下午
    • 环境变量
      • 命令行…很多程序的启动都需要读取环境变量中的值
      • 方式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 如果没有,我们可以指定一个别的文件,注意:要在当前的文件夹或者文件夹以下,不能以上。

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文件
0 0