NodeJS

NVM常用命令

1.nvm list 查看当前安装Node.js所有版本
2.nvm install 版本号 安装指定版本的Node.js
3.nvm uninstall 版本号 卸载指定版本的Node.js
4.nvm use 版本号 选择指定版本的Node.js

NodeJS环境和浏览器环境执行JS代码区别

1.Node环境和浏览器环境区别

Node JS环境和浏览器一样都是一个JS的运行环境,都可以执行JS代码,但是由于宿主不同所以特点也有所不用

1.1内置对象不同
  • 浏览器环境中提供了window全局对象
  • Node JS环境中的全局对象不叫window,叫global。
1.2this默认指向不同
  • 浏览器环境中全局this默认指向window
  • Node JS环境中全局this默认指向空对象{}
1.3API不同
  • 浏览器环境中提供了操作节点的DOM相关API和操作浏览器的BOM相关API
  • Node JS环境中没有HTML节点也没有浏览器,所以Node JS环境中没有DOM/BOM

自定义模块

1.什么是模块?

1.1浏览器开发中的模块
在浏览器开发中为了避免命名冲突,方便维护等等,我们采用类或者立即执行函数来封装JS代码,来避免命名冲突和提升代码的维护性,其实这里的一个类或者一个立即执行函数就是浏览器开发中一个模块。

let obj = {
  模块中的业务逻辑代码
};
;(function() {
  模块中的业务逻辑代码
  window.xxx = xxx;
}) ();

存在的问题:没有标准没有规范

1.2Node JS开发中的模块
Node JS采用Common JS规范实现了模块系统

1.3CommonJS规范
CommonJS规范规定了如何定义一个模块,如何暴露(导出)模块中的变量函数,以及如何使用定义好的模块

  • 在CommonJS规范中一个文件就是一个模块
  • 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
  • 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其他文件才可以使用
  • 在CommonJS规范中想要其他文件暴露的变量函数必须通过require()导出模块才可以使用

NodeJS-Require注意点

1.exports和module.exports区别
exports只能通过exports.xxx方式导出数据,不能直接赋值
module.exportx既可以通过module.exportx.xxx方式导出数据,也可以直接赋值

注意点:
在企业开发中无论哪种方式都不要直接赋值,这个问题只会在面试中出现

1require注意点:

1.1require导入模块时可以不添加模块的类型,如果没有指定导入模块的类型,那么会依次查找.js .json .node文件,无论是三种类型中的哪一种,导入之后都会转换成JS对象返回给我们

1.2导入自定义模块时必须指定路径

require可以导入“自定义模块(文件模块)”,“系统模块(核心模块)”,“第三方模块”
导入“自定义模块”模块时,前面必须加上路径
导入“系统模块”和“第三方模块”是不需要添加路径的

Node包和包管理

1.什么是包?

前面说过在编写代码的时候尽量遵守单一原则,也就是一个函数尽量只做一件事情
例如:读取数据函数/写入数据函数/生成随机数函数等等,不要一个函数既读取数据又写入数据又生成随机数,这样写代码非常容易出错,也非常难以维护

在模块化开发中也是一样,在一个模块(一个文件中)尽量只完成一个特定的功能,但是有些比较复杂的功能可能需要由多个模块组成
例如:jQuery选择器相关的代码在A模块,css相关的代码在B模块.....我们需要把这些模块组合在一起才是完成的jQuery,那么这个时候我们就需要一个东西来维护多个模块之间的关系,这个维护多个模块之间的东西就是“包”

简而言之:一个模块就是一个单独的文件,一个包中可以一个或者多个模块

2.NodeJS包的管理

在NodeJS中为了方便开发人员发布,安装和管理包,Node JS推出了一个包管理工具
NPM(Node Package Manager)
NPM不需要我们单独安装,只要搭建好Node JS环境就已经自动安装好了
NPM就相当于电脑上的“QQ管家软件助手”,通过NPM我们可以快速找到我们需要的包,可以快速安装我们需要的包,可以快速删除我们不想要的包等等

NPM使用

1.NPM包安装方式
  • 全局安装(一般用于安装全局使用的工具,存储在全局node_modules中)
    npm install -g 包名(默认安装最新版本)
    npm uninstall -g 包名 (删除这个包)
    npm update -g 包名(更新包)

-本地安装 (一般用于安装当前项目使用的包,存储在当前项目node_modules中)
npm install 包名(默认安装最新版本)
npm uninstall 包名 (删除这个包)
npm update 包名(更新包)

2.初始化本地包

npm init 初始化package.json文件
npm init -y 初始化package.json文件

npm i 所有的包都会被安装
npm i --production 只会安装dependencies中的包

Yarn的使用

1什么是Yarn?

Yarn是由Facebook,Google,Exponent和Tilde联合推出的一个新的JS包管理工具,Yarn是为了弥补npm5.0之前的一些缺陷而出现的

注意点:
在npm5.0之前,yarn的优势的特别明显,但是现在NPM已经更新到10.1.x了,随着NPM的升级,NPM的优化,甚至超越了Yarn,所以个人还是建议使用NPM

2.NPM的缺陷:

2.1npm install的时候太慢
npm 是按照队列执行每个 package,也就是说必须要等到当前package安装完成之后,才能继续后面的安装

API-Bufffer

准备知识

1.计算机只能识别0和1(因为计算机只认识通电和断电两种状态)
2.所有存储在计算机上的数据都是0和1组成的(数据越大0和1就越多)

1.什么是Buffer?

Buffer是Node JS全局对象上的一个类,是一个专门用于存储字节数据的类
Node JS提供了操作计算机底层API,计算底层只能识别0和1,所以就提供了一个专门用于存储字节数据的类

2.如何创建一个Buffer对象
2.1创建一个指定大小的Buffer

Buffer.alloc(size[, fill[, encoding]])

2.2根据数据/字符串创建一个Buffer对象

Buffer.from(string[, encoding])

3.Buffer对象本质

本质就是一个数组

1.将二进制数据装换成字符串

返回:<string> 转换后的字符串数据。
buf.toString();

2.往Buffer中写入数据

string <string> 要写入buf的字符串。
offset <insteger> 开始写入 string 之前要跳过的字节数。默认值:0。
length <integer>要写入的字节数。默认值:buf.length - offset。
encoding <string> string的字符编码。默认值:‘utf8’。
返回:<integer> 已写入的字节数。
buf.write(string[, offset[, length]][, encoding])

3.从指定位置截取新Buffer

start <integer> 新Buffer开始的位置。默认值:0。
end <integer> xinBuffer结束的位置(不包含)buf.slice([start[, end]])

API-Buffer静态方法

1.检查是否支持某种编码格式

Buffer.isEncoding(encoding)

2.检查是否是Buffer类型对象

Buffer.isBuffer(obj)totalLength

3.获取Buffer实际字节长度

Buffer.buteLength(string[, enconding])
注意点:一个汉字占用三个字节

4.合并Buffer中的数据
buffer.concat(list[, total'Length])

搭建web服务器

1.什么是HTTP模块

通过 Node JS提供的HTTP模块,我们可以快速的构造一个web服务器
也就是快速实现过去PHP服务器的功能(接受浏览器请求,响应浏览器请求等)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容