Node

Node.js中不能使用BOM和DOM的API,可以使用 console和定时器API

Node.js中的顶级对象为 global,也可以用 globalThis 访问顶级对象。

1. 全局对象

node下的全局对象global

1//console.log(global) ==> node引擎下的全局对象
2
3let a = 10;
4console.log(global.a)
5
6//解释文件(js文件)的模式下,a不会被挂载到全局对象上。
7//交互模式(黑窗口的命令行)下,定义的变量会被挂载到global上。
8
9
10global.b=20
11console.log(b)  //挂载在global上的变量可以直接访问
12
13
14console.log(global === this); //false  解释文件模式下,this不指向global,而是指向本模块(该js文件);但是在交互模式下,this指向global。

2. 模块的使用

使用模块的好处(了解)

  • 最大的好处就是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。
  • 使用模块可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己编写模块时,不必考虑名字会与其他模块冲突。

模块规范的定义(了解)

  • 一个js文件就是一个模块,模块的作用域时私有的,内部定义的变量或者函数,只在当前的文件(模块)可以使用。
  • 如果别人使用我们模块里面的的东西,那么有两点要做:(以commonJS的Modules规范:Node.js为例)
    • 自己编写的模块,由于模块作用域是私有的,默认情况下,外部是没有办法使用的。可以导出exports或者modules.exports。导出的时候以对象的方式导出。
    • 别人要使用,则需要先引入该模块,使用require引入,并设置一个变量来接收导入的对象。

对书写格式和交互规则的详细描述,就是模块定义规范。

  • AMD规范:Require.js 【模块化规范的鼻祖,旧规范,已经退出历史舞台了】

  • CMD规范:Sea.js 【模块化规范的鼻祖,旧模范,已经退出历史舞台了】

  • CommonJS的Modules规范:Nodejs【现在正在使用的】

  • ES6模块化规范 import ... from ...【现在正在使用的】

模块化使用

commonJS的使用

CommonJS的Modules规范,也是Nodejs自带的规范,就是规范了导出该怎么写,导入该怎么写

1//CommonJS模块规范
2let a=10;
3function fn(){
4  console.log('我是模块中的函数fn')
5}
6class Animal{
7  constructor(){
8    this.age=0
9  }
10}
11
12
13//CommonJS导出的第一种格式
14exports.a=a
15exports.fn=fn
16exports.Animal=Animal
17//CommonJS导出的第二种格式
18module.exports = {
19  a,
20  fn,
21  Animal
22}
23
24//引入模块
25const xxx(跟模块文件名一致) = require('./modules/xxx.js');
26//使用
27console.log(xxx.a)  	//10
28xxx.fn()	//我是模块中的函数fn
29let ani = new xxx.Animal();
30console.log(an1.age)
31
32
33
34
35/*
36	注意:
37		1.require() 是commonJS引入模块的一个方法
38		2.引入模块之后,被一个常量接收,常量名一般跟模块名一致(不是必须,但大家都这么做)
39		3.当导入的是js文件时,后缀名可以不写
40		4.如果文件名是index.js,则整个文件名都可以不写
41
42*/

模块中的this指向

1//模块中的this指向本模块
2console.log(exports);		//{}
3console.log(module.exports)		//{}
4console.log(exports===module.exports)		//true
5
6console.log(exports===this)		//true
7console.log(this)		//{}
8console.log(global===this)		//false

3. nodemon插件

1# 创建并进入demo文件夹
2mkdir demo && cd demo
3# 创建package.json
4npm init -y
5# 安装express模块
6npm install express
7# 安装nodemon插件
8npm i -g nodemon
9
10# 启动服务
11nodemon app.js