Node

1. Node 开发概述


1.1 学习服务器端开发基础目的

  • 能够和后端程序员更加紧密的配合
  • 网站业务逻辑前置,学习前端技术需要后端技术支撑(Ajax)
  • 扩宽知识视野,能够站在更高的角度审视整个项目

1.2 服务器端开发要做的事情

  • 实现网站的业务逻辑
  • 数据的删改查

1.3 为什么选择Node

  • 使用 JavaScript 语法开发后端应用
  • 一些公司要求前端工程师掌握 Node
  • 开发生态系统活跃,有大量开源库可以使用
  • 前端开发工具大多基于 Node 开发

1.4 Node 是什么

Node 是一个基于 Chrome V8 引擎的 JavaScript 代码运行环境

运行环境:

  • 浏览器(软件)能够运行 JavaScript 代码,浏览器就是 JavaScript 代码的运行环境
  • Node(软件)能够运行 JavaScript 代码,Node就是 JavaScript 代码的运行环境

2. Node运行环境搭建

官网网址

  • LTS:稳定版
  • Current:实验版

2.1 Node 环境安装失败解决办法

  1. 错误代号2502,2503失败原因:系统帐户权限不足

    解决办法:

    1. 以管理员身份运行 powershell 命令行工具
    2. 输入运行安装包命令 msiexec /package node安装包位置
  2. 执行命令报错

    失败原因:Node 安装目录写入环境变星失败

    解决办法:将 Node 安装目录添加到环境变量中


2.2 PATH 环境变量

存储系统中的目录,在命令行中执行命令的时候系统会自动去这些目录中查找命令的位置


3. Node.js 快速入门


3.1 组成

  • JavaScript 由三部分组成:ECMAScript、DOM、BOM
  • Node.js 是由 ECMAScript 及 Node 环境提供的一些附加 API 组成的,包括文件、网络、路径等等一些更加强大的 API
graph TD JavaScript --> A[ECMAScript<br>Javascript基础语法] JavaScript --> B[DOM<br>页面文档对象模型] JavaScript --> C[BOM<br>浏览器对象模型]
graph TD Node.js --> A[ECMAScript<br>Javascript基础语法] Node.js --> B[Node 模块 API]

3.2 基础语法

所有 ECMAScript 语法在 Node 环境中都可以使用

在 Node 环境下执行代码,使用 Node 命令执行后缀为 .js 的文件可


3.3 全局对象 global

在浏览器中全局对象是 window,在Node 中全局对象是 global

Node 中全局对象下有以下方法,可以在任何地方使用,global 可以省略

  • console.log() 在控制台中输出
  • setTimeout() 设置超时定时器
  • clearTimeout() 清除超时定时器
  • setinterval() 设置间歇定时器
  • clearinterval() 清除间歇定时器

4. Node.js 模块化开发


4.1 JavaScript 开发弊端

JavaScript 在使用时存在两大问题

  • 文件依赖:多个 js 文件之间存在依赖关系,不容易理清之间的关系

    解决:Node 可以自动管理各个文件之间的依赖关系

  • 命名冲突:多个 js 文件之间的互相开放,容易同变量名被赋值覆盖

    解决:Node 规定各个文件之间处于半闭合的状态,可控制开放部分


4.2 软件中的模块化开发

一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行


4.3 模块化开发规范

  • Node.js 规定一个 JavaScript 文件就是一个模块,模块内部定义的变量

    和函数默认情况下在外部无法得到

  • 模块内部可以使用 exports 对象添加成员导出,使用 require 方法导入其他模块


4.4 模块成员导出

语法:exports.属性名 = 变量名(可名称相同,方便识别)

// a.js
let num = 6; // 在模块内部定义变量
const sayi = name =>`你好${name}`; // 在模块内部定义方法 
exports.num = num; // 向模块外部导出数据
exports.sayi = sayi;

4.5 模块成员导入

语法:let 模块名 = require('路径')

注意:导入模块时文件路径后缀可以省略

// b.js
let a = require('./b.js'); // 在 b 模块中导入模块 a
// 输出 b 模块中的 num 变量
console.log(a.num); // 6
// 调用 b 模块中的sayHi方法并输出其返回值
console.log(a.sayi('world')); // 你好world

4.6 模块成员导出的另一种方式

exports 是 module.exports 的别名(地址引用关系)

当 exports 对象和 moudle.exports 对象指向的不是同一个对象时,导出对象最终以 module.exports 为准

简述:有 module.exports 的存在 exports 就无效了

module.exports = {
    name: 'zhangsan'
};

exports = {
    age: 20 // 无效
}

5. 系统模块

Node 运行环境提供的 API

因为这些 API 都是以模块化的方式进行开发的,所以又称 Node 运行环境提供的 API 为系统模快

graph TD 文件模块fs --> A[读取文件] 文件模块fs --> B[写入文件] 文件模块fs --> C[创建文件夹]

5.1 文件操作 fs

f:file 文件,s:system 系统,文件操作系统

引用文件操作模块:const fs = require('fs');


读取文件内容

fs.rearile('路径/文件名'[,'文件编码'],callback);

// 1.通过模块的名字 fs 对模块进行引用
const fs = require('fs');

// 2.通过模块内部的readFile读取文件内容
fs.readFile('./01-helloworld.js', 'utf8', (err, doc) => {
    // 如果文件读取出错 err 是一个对象 包含错误信息
    // 如果文件读取正确 err 是 null
    console.log(err); // null
    console.log(doc); // 文件读取的结果
});

写入文件内容

fs.writeFile('路径/文件名', '数据' ,callback);

// 1. 通过模块的名字 fs 对模块进行引用
const fs = require('fs');

// 2. 通过模块内部的 writeFile 读取文件内容
fs.writeFile('./demo.txt', '即将写入的内容', err => {
    if (err != null) { // 如果错误信息对象不为空
        console.log(err); // 输出错误信息
        return; // 结束执行
    }
    console.log('文件写入成功'); // 写入成功直接输出
})

5.2 路径操作 path

不同操作系统的路径分隔符不统一,所以要进行路径拼接

  • Windows:\ /
  • Linux:/

路径拼接语法

path.join('路径', 路径', ...)

const path = require('path'); // 引用模块
const f = path.join('public', 'uploads', 'avatar');
console.log(f); // public\uploads\avatar

5.3 相对路径VS绝对路径

  • 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录

  • 在读取文件或者设置文件路径时都会选择绝对路径

  • 使用 __dirname 获取当前文件所在的绝对路径

const fs = require('fs'); // 导入文件系统模块
const path = require('path'); // 导入路径操作模块
console.log(__dirname); // 输出当前文件的绝对路径
// 拼接绝对路径与文件名
let l = path.join(__dirname, '01-helloworld.js'); 
fs.readFile(l, 'utf8', (err, doc) => {
    console.log(err) // null
    console.log(doc) // 读取文件
});

posted @ 2020-11-12 18:53  今夜星河漫漫  阅读(280)  评论(0)    收藏  举报