欢迎访问巨立鑫电脑培训官方网站! 网址:http://www.jlxpx168.com

在线报名 | 联系我们

软件编程 平面设计 APP开发 弱电工程

Node基础

   常人所说的NODE是后台编程语言,这种说法其实是错误的。NODE只是一个工具(或者环境),我们可以把NODE安装在服务器上,NODE提供的环境可以运行JS代码,这样我们就可以在服务器端使用Java编写一些处理服务器相关操作的程序,也可以理解为JS变为了后台编程语言。
 
1、NODE是基于V8引擎来渲染JS的(V8是谷歌的引擎)
 
渲染JS的速度会很快
 
我们在使用JS开发后台程序的时候,不需要考虑浏览器兼容了,使用JS的最新标准即可(ECMA)
 
2、单线程、无阻塞I/O操作、事件驱动(event-driven)
 
NODE是如何执行JS代码的
 
常用的方式有三种
 
使用NODE的REPL(Read-Evaluate-Print-Loop,输入-求值-输出-循环)命令
 
使用命令行:node xxx.js (在命令行中把xxx.js文件中的代码执行)
 
在webStorm中直接右键 -> Run xxx.js 也可以把JS代码在NODE中执行
 
I/O操作
 
I(input):输入
 
O(output):输出
 
I/O操作泛指对文件及文件中内容的操作(包括:增删改查)
 
JS作为前端编程语言(运行在客户端浏览器中),不能直接对客户端的本地文件进行I/O操作
 
目的是为了保证客户端信息的安全
 
有一些机制可以操作客户端内容(input type=’file’),但是需要用户手动选择某些文件上传才可以
 
JS作为后台编程语言(运行在服务器端NODE环境下),可以对服务器上的资源文件进行I/O操作
 
NODE中绝对提供了供JS代码操作I/O的方法(后面讲到的fs模块就是做这件事情的)
 
letfs = require( 'fs');
//=>异步读取:异步读取文件中的内容就是无阻塞I/O操作
 
//fs.readFile()//=>同步读取
 
letcon = 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之前执行)
 
 
事件驱动:
 
到达某个时候做一些事情,就是事件驱动(服务器端能用异步的不用同步操作)
 
 
 
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){ letobj= 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 按照依赖模块清单,跑环境

在线留言

*将严格保护您的信息请放心填写

热门案例

更多 +

帮助中心

在线报名 联系我们

咨询电话(9:00-17:00)

0551-65571116
13225607766

在线客服

点击咨询

扫一扫咨询

移动端查看

在线咨询
手机请直接输入:如1860086xxxx
座机前加区号:如0105992xxxx
输入您的电话号码,点击通话,稍后您将接到我们的电话,该通话对您完全免费,请放心接听!
扫描二维码