NODE中一些常用的基础知识讲解
  • <datalist id="cabeh"><label id="cabeh"><strong id="cabeh"><th id="cabeh"></th><area id="cabeh"></area></strong></label><mark id="cabeh"><hgroup id="cabeh"></hgroup></mark><param id="cabeh"></param><button id="cabeh"><datalist id="cabeh"><dl id="cabeh"><noscript id="cabeh"></noscript><thead id="cabeh"></thead></dl></datalist></button><code id="cabeh"></code></datalist>
    <ul id="cabeh"></ul><map id="cabeh"></map>
    <b id="cabeh"><noscript id="cabeh"><figure id="cabeh"><canvas id="cabeh"><ins id="cabeh"></ins></canvas><label id="cabeh"></label><dfn id="cabeh"></dfn></figure><progress id="cabeh"></progress></noscript></b>

        1. NODE中一些常用的基础知识讲解

          作者:日期:2017-12-31 17:30:56 点击:346

          NODE中一些常用的基础知识讲解

           

          NODE的特点

          常人所说的NODE是后台编程语言,这种说法其实是错误的。NODE只是一个工具(或者环境),我们可以把NODE安装在服务器上,NODE提供的环境可以运行JS代码,这样我们就可以在服务器端使用JavaScript编写一些处理服务器相关操作的程序,也可以理解为JS变为了后台编程语言。

          1、NODE是基于V8引擎来渲染JS的(V8是谷歌的引擎)

          • 渲染JS的速度会很快
          • 我们在使用JS开发后台程序的时候,不需要考虑浏览器兼容了,使用JS的最新标准即可(ECMAScript)

          2、单线程、无阻塞I/O操作、事件驱动(event-driven)


          NODE是如何执行JS代码的

          常用的方式有三种

          • 使用NODE的REPL(Read-Evaluate-Print-Loop,输入-求值-输出-循环)命令
          • 使用命令行:node xxx.js (在命令行中把xxx.js文件中的代码执行)
          • 在webStorm中直接右键 -> Run xxx.js 也可以把JS代码在NODE中执行

          Alt text

          Alt text

          Alt text


          I/O操作

          I(input):输入
          O(output):输出
          I/O操作泛指对文件及文件中内容的操作(包括:增删改查)

          JS作为前端编程语言(运行在客户端浏览器中),不能直接对客户端的本地文件进行I/O操作

          • 目的是为了保证客户端信息的安全
          • 有一些机制可以操作客户端内容(input type=’file’),但是需要用户手动选择某些文件上传才可以

          JS作为后台编程语言(运行在服务器端NODE环境下),可以对服务器上的资源文件进行I/O操作

          • NODE中绝对提供了供JS代码操作I/O的方法(后面讲到的fs模块就是做这件事情的)
          let fs = require('fs');
          //=>异步读取:异步读取文件中的内容就是无阻塞I/O操作
          //fs.readFile()
           
          //=>同步读取
          let con = fs.readFileSync('./readme.md', 'utf8');
          console.log(con);

          JS中的同步异步

          客户端:

          • 定时器都是异步操作的
          • AJAX中也提供异步操作(Promise设计模式是异步编程的处理模式)
          • 事件绑定也是异步编程
          • 回调函数也可以理解为异步编程

          同步:一件事一件事的来进行处理,A做完了,B才能做,A做不完,B也无法执行…

          异步:上一件事没有彻底完成,下一件事可以先干着,A(异步)没做完,B(同步)先做,等B做完了,在把A进行处理…

          JS本身是单线程的(有很多的进程), 一次只能做一件事情


          NODE中的异步操作:

          • 定时器
          • 异步的I/O
          • 回调函数
          • setImmediate:在等待任务队列的顶部最先执行
          • process.nextTick:在主任务队列的最底部执行(永远会在setImmediate之前执行)

          事件驱动:
          到达某个时候做一些事情,就是事件驱动(服务器端能用异步的不用同步操作)

          Alt text

          NODE和客户端浏览器的主要区别:全局对象
          浏览器全局对象: window
          NODE全局对象: global

          NODE天生就是基于模块化开发的

          NODE中模块这个概念非常强(强到我们每创建一个新的JS,都相当于创建了一个新的模块)

          NODE是基于commonjs规范来完成模块设计的(如何创建模块、如何调取模块、如何导出模块 这些就是规范里提及的内容)

          • CMD模块开发思想:seajs (按需导入:用到的时候在导入进来使用)
          • AMD模块开发思想:requirejs (提前导入所有需要的依赖)

          1、自定义模块:自己创建的
          2、第三方模块:别人写好的我来用
          3、内置模块:天生自带的

          自定义模块的原理

          创建一个JS就相当于创建一个模块,而模块之间是独立的(也可以共享),为了实现这样的需求,每当创建一个JS,NODE都帮助我们做了很多的事情

          //=>NODE为了实现模块之间的独立,会自动包一层闭包,而且给每一个模块传递五个值
          (function (exports, require, module, __filename, __dirname) {
          /*
          * module模块:NODE模块管理的对象
          * exports叫做导出,等同于module.exports,用来把模块进行导出的
          * require是导入的方法,通过这个方法可以把一些模块导入到当前模块中使用
          */
           
          //=>内部代码中有一个类似于这样的操作,可以把一些想要供别人使用的属性和方法暴露出来
          module.exports=exports=this={
          fn:()=>{}
          };
          })();
           
          //=>下一个模块
          (function (exports, require, module, __filename, __dirname) {
          let obj=require('pre');//=>导入上边的模块
          //=>我们的obj就是上面模块导出的对象
          //{fn:()=>{}}
          })();

          require
          导入某个模块,目的是使用其它模块中的属性和方法

          require('./xxx') : 指定目录的情况下,都是为了要导入自己定义的模块
           
          require('xxx'):不指定目录情况下,可能是导入第三方安装的模块,也可能是导入内置模块(首先到node_modules文件夹中找第三方模块,有的话,导入的就是第三方模块,没有的话,看内置模块中有没有,内置中这个模块,导入的就是内置模块,内置中没有就会报错)

          module.exports
          把当前模块中的某些属性和方法导出

          module.exports.fn=fn;
          module.exports.a=12;
          //=>上面写起来麻烦(上面属于向原有内置对象的堆内存中增加属性和方法,下面属于导出一个新的堆内存)
          module.exports={
          fn:fn,
          a:12
          };
           
          ---
          //=>直接使用exports也可以,但是这种模式只能使用原有内置内容,自己开辟新内存不行
          exports.fn=fn;
          exports={};//=>这种方式不行

          思考题:
          有三个自定义模块
          A:任意数求和 sum :sum(1,2,3,4) => 10
          B:求平均数 avg : avg(12,23,34) =>平均数 (先求和[调取A中的sum],除以长度,求出平均数)
          C:最后调取 : 调取B中的avg ,传递几个数,算出平均数即可

          第三方模块的安装

          除了npm我们还可以使用yarn来安装模块

          1、首先在全局安装yarn
          npm install yarn -g

          2、想在项目中安装模块,和npm的操作步骤类似
          yarn init -y 生成package.json
          yarn add xxx 安装具体模块,并且保存在生产依赖项中(yarn只能把模块安装在本地项目中不能安装在全局)
          yarn add xxx –dev 保存在开发依赖项中
          yarn remove xxx 移除安装的模块
          yarn install 按照依赖模块清单,跑环境

          基本上和npm的操作类似,大家可以体验一把哈,看看急速安装是什么状态

          上一篇: Git基础知识精讲

          下一篇: Promise 详解与实现(遵循Promise/A+规范)

          73099威尼斯城73099.com |威尼斯73099.com官方网站登录 |威尼斯手机娱乐官网 | |手机版 | | 澳门威尼斯3544.com,威尼斯3544.com官网登陆,威尼斯3544.com备用网址-0327.com|威尼斯澳门官方6799.com,www.6799.com,威尼斯官方娱乐6799.com登陆-vns566.net|6799.com威尼斯手机版,6799.com威尼斯网址,6799.com威尼斯官网登陆-59859.com|86087威尼斯城86087.com,威尼斯86087.com官方网站登录,威尼斯手机娱乐官网-83855.com|澳门威利斯人手机版,www.86087.com官方入口,澳门威利斯人在线娱乐-944185.com|威尼斯澳门官方4886.com,www.4886.com,威尼斯官方娱乐4886.com登陆-k92988.com|