这是我参与「第四届青训营 」笔记创作活动的第18天
一、基础知识
1. 命令行窗口
-
dir命令:列出当前目录下所有的文件夹名字;
-
md命令:创建一个文件夹;
-
rd命令:删除一个文件夹;
-
path环境变量的作用:当我们在命令行窗口中使用命令打开一个文件或者调用一个程序时,系统会首先在当前目录下寻找文件或程序,如果在当前目录下找到了则直接打开,如果没有找到则会到环境变量path的路径下寻找。如果都没有找到则报错。
-
所有我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样我们就可以在任意位置访问这些文件和程序了。
2. Node.js简介
node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。
3. Node的用途
Node处理请求时单线程,访问的人太就会出问题的。
- Web服务API,比如REST;
- 实时多人游戏;
- 后端的Web服务,例如跨域、服务器端的请求;
- 基于Web的应用;
- 多用户端的通信,如即时通信
二、模块化
1. 模块化简介
- 一个js文件就是一个js模块;
- 在node中,通过require()函数来引入外部的模块,require()可以传递一个文件路径作为参数,node将会自动根据该路径来引入外部模块,这里的路径,如果使用相对路径,必须要以.或者..开头。
- 使用requore()函数引入模块后,该函数会返回一个对象,这个对象代表的是引入的模块。
- 在node中,每一个js文件中的js代码都是独立运行在函数中。而不是全局作用域,所以一个模块中的变量和函数在其他模块中是无法访问的。但是可以通过exports(module.exports)来向外暴露变量和方法! ,只需要将需要暴露给外部的变量和方法设置为export的属性即可。
- 在node中有一个全局对象global,它的作用和网页中的window类似,在全局中创建的变量和方法会作为global中的属性和方法保存。
- exports和module.exports的区别:exports只能使用.的方式来向外暴露内部变量;而module.exports可以使用.的形式,也可以直接赋值对象。
模块(第三方)的引用:从当前目录的node_modules依次向上级寻找,只要存在就可以使用。
创建模块:
// 1. 使用exports单个导出
exports.x=10;
exports.y=20;
exports.add=function (a,b) {
return a+b;
};
// 2. 使用module.exports整体导出
module.exports={
name:"码农云库 ",
age:2,
mul:function (a,b) {
return a*b;
}
}
使用模块:
// 1.引入模块
var math = require("./math");
console.log(math);
// 2. 使用模块 (通过exports单个导出的)
console.log(math.x);
console.log(math.add(1,2));
// 3. 使用模块(通过module导出对象形式)
console.log(math.age);
console.log(math.age);
console.log(math.mul(2,8));
2. 包的简介
- CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。CommonJS的包规范由包结构和包描述文件两部分组成。包结构:用于组织包中的各种文件。包描述文件package.json:描述包的相关信息,以供外部读取分析。
- 包结构:包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:package.json---描述文件,bin---可执行二进制文件,lib---js代码,doc---文档,test---单元测试。
3. npm简介
- 全称:Node Package Manager;(包管理器,就相当于一个应用商店,我们可以下载自己想要的包);
- CommonJS包规范是理论,NPM是其中一种实践;
- 对于Node而言,NPM帮助其完成了第三方的模块发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。
- 当我们安装好node以后,会自带一个npm;
npm常用命令:
- npm -v :查看版本;
- npm :帮助说明;
- npm search 包名 :搜索包名;
- npm install 包名 :在当前目录下安装包;
- npm install 包名 -g :全局模式安装包;
- npm remove 包名 :删除包;
- npm install 包名 --save 安装包并添加到依赖中;(常用)
- npm install :下载当前项目所依赖的包(根据package.json);
淘宝npm镜像
当我们在项目中npm install 太慢时,可以使用淘宝镜像来提高npm的速度;
- 临时使用
npm --registry https://registry.npm.taobao.org install express1
- 持久使用
npm config set registry https://registry.npm.taobao.org1
- 通过cnpm使用
npm install -g cnpm --registry=https://registry.npm.taobao.org1
使用原来的服务器使用npm,如果网速很慢可以使用淘宝镜像代替,使用cnpm下载;
通过npm下载的包都放在node_modules文件夹中;通过npm下载的包可以直接通过包名引入即可。
node搜索包的流程
node在使用模块名来引,入模块时,它会首先在当前目录下的node_modules中寻找是否含有该模块,如果有则直接使用,如果没有则去上一级目录寻找,直到找到为止。
三、Buffer缓冲区
Buffer的结构和数组很像,操作的方法也和数组类似;
数组不能存储二进制文件,而buffer就是专门用来存储二进制数据的;但在显示时都是16进制形式(00 - ff);
使用buffer不需要引入模块,可以直接使用;
// 1. 方式一:将一个字符串转换为
Buffervar str = "Hello";
var buf = Buffer.from(str);
console.log(buf);
// 2. 方式二 : Buffer一旦确定大小,连续内存,不能更改大小
var buf = Buffer.alloc(10);
buf[0]=15console.log(buf);
// 3. 方式三:但是可以包括敏感数据(不清除原来的数据)
var buf = Buffer.allocUnsafe(10)
console.log(buf);
// 将Buffer数据转换为字符串
var buf = Buffer.from("这是数据");
console.log(buf.toString());