Node.js 与前端开发实战| 青训营笔记

82 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第18天

一、基础知识

1. 命令行窗口

  1. dir命令:列出当前目录下所有的文件夹名字;

  2. md命令:创建一个文件夹;

  3. rd命令:删除一个文件夹;

  4. path环境变量的作用:当我们在命令行窗口中使用命令打开一个文件或者调用一个程序时,系统会首先在当前目录下寻找文件或程序,如果在当前目录下找到了则直接打开,如果没有找到则会到环境变量path的路径下寻找。如果都没有找到则报错。

  5. 所有我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样我们就可以在任意位置访问这些文件和程序了。

2. Node.js简介

node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。

3. Node的用途

Node处理请求时单线程,访问的人太就会出问题的。

  1. Web服务API,比如REST;
  2. 实时多人游戏;
  3. 后端的Web服务,例如跨域、服务器端的请求;
  4. 基于Web的应用;
  5. 多用户端的通信,如即时通信

二、模块化

1. 模块化简介

  1. 一个js文件就是一个js模块;
  2. 在node中,通过require()函数来引入外部的模块,require()可以传递一个文件路径作为参数,node将会自动根据该路径来引入外部模块,这里的路径,如果使用相对路径,必须要以.或者..开头。
  3. 使用requore()函数引入模块后,该函数会返回一个对象,这个对象代表的是引入的模块。
  4. 在node中,每一个js文件中的js代码都是独立运行在函数中。而不是全局作用域,所以一个模块中的变量和函数在其他模块中是无法访问的。但是可以通过exports(module.exports)来向外暴露变量和方法! ,只需要将需要暴露给外部的变量和方法设置为export的属性即可。
  5. 在node中有一个全局对象global,它的作用和网页中的window类似,在全局中创建的变量和方法会作为global中的属性和方法保存。
  6. 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. 包的简介

  1. CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。CommonJS的包规范由包结构和包描述文件两部分组成。包结构:用于组织包中的各种文件。包描述文件package.json:描述包的相关信息,以供外部读取分析。
  2. 包结构:包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:package.json---描述文件,bin---可执行二进制文件,lib---js代码,doc---文档,test---单元测试。

3. npm简介

  1. 全称:Node Package Manager;(包管理器,就相当于一个应用商店,我们可以下载自己想要的包);
  2. CommonJS包规范是理论,NPM是其中一种实践;
  3. 对于Node而言,NPM帮助其完成了第三方的模块发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。
  4. 当我们安装好node以后,会自带一个npm;

npm常用命令

  1. npm -v :查看版本;
  2. npm :帮助说明;
  3. npm search 包名 :搜索包名;
  4. npm install 包名 :在当前目录下安装包;
  5. npm install 包名 -g :全局模式安装包;
  6. npm remove 包名 :删除包;
  7. npm install 包名 --save 安装包并添加到依赖中;(常用)
  8. npm install :下载当前项目所依赖的包(根据package.json);

淘宝npm镜像

当我们在项目中npm install 太慢时,可以使用淘宝镜像来提高npm的速度;

  1. 临时使用
npm --registry https://registry.npm.taobao.org install express1
  1. 持久使用
npm config set registry https://registry.npm.taobao.org1
  1. 通过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());