node.js理论与基础操作

168 阅读7分钟

node.js 是什么

node.js 并非任何一种语言,而是一个基于 Chrome V8 引擎 的 JavaScript 运行时

名词解释

  • chrome V8引擎:

    • chrome: chrome浏览器

    • 引擎:用来解析和执行代码的工具。

      汽车发动机引擎可以将燃油转成动力; JS解析引擎可以将代码转成最终的效果

    • V8:项目的代号

  • 运行时:理解为一个容器,用来运行代码的环境。

node 的安装

建议在官网(百度中搜索node.js即可)建议安装14.17.6的长期稳定版。

node 的使用

node安装成功后不会再桌面上有任何的快捷方式,打开方式有如下三种,

Windows 系统快速打开终端的三种方式

  1. cmd窗口(window+R, --->运行-->录入cmd,回车)

image.png

  1. 在资源管理器的地址栏中,输入 cmd 后直接回车,即可打开终端
  2. 任意位置,shift+右键

image.png

Mac 电脑快速打开终端的方式:

①使用快捷键 Command(⌘) + 空格键 打开搜索窗口

②在搜索窗口中输入 terminal 并回车,即可打开终端

vscode自带的打开终端的方式

image.png

简单的键盘按键及命令

image.png

复制与粘贴

在小黑窗中复制内容:选中内容,再点鼠标右键

把粘贴板中的内容复制到小黑窗: 点鼠标右键

在node.js中运行代码

请事先准备好一个js文件。例设这里的路径是:d:/src/index.js

具体内容如下:

// d:/src/index.js

var a = 1;

console.info(a + 2); 在文件的目录下打开终端,如图所示:

image.png 运行这个文件

格式


node 后面接要执行的文件的路径  如 node 文件名

注意:node 的后面有一个空格

node.js中的模块分类

  • 核心模块

    • nodejs自带的模块。安装nodejs之后可以直接使用。相当于学习js时使用的alert,confirm等函数。 核心模块就是 Node 内置的模块,安装完Nodejs之后,开箱即用
  • 每个核心模块都有唯一的标识名称(fs, path,querystring,http......)

  • 核心模块有很多个,每个模块都有自己的作用,这里有文档

  • 使用步骤都是先导入,再使用

    例如:const fs = require('fs')


const path = require('path')        // 1. 导入模块
const str = path.join('a', 'b')     // 2. 使用模块
console.log(str)
```每个核心模块有自己的功能,想用哪个就导入哪个。

**语法格式**

const 模块的接收名称 = require('模块名字')


其中:1.模块的接收名称可以自定义,只要是合法的变量名即可。例如:

const 123fs = require('fs') // 错误,不能以数字开头

​ const p = require('path') // 正确

2const 。可以使用varlet,但是建议使用const,因为我们不希望它被改变。名字不必大写成FS,一般也就叫
fs这个名字。

fs模块介绍

fs模块(fs是 FileSystem的简写)是Node.js用来进行文件操作的模块,它属于核心模块。你引入之后就可以直接使用了。

官方手册:nodejs.cn/api/fs.html api.nodejs.cn/

使用fs模块的步骤

  1. 引入模块

    
    // 引入模块
    const fs = require('fs');
    // 可以使用var、let,但是建议使用const,因为我们不希望它被改变。
    // 名字不必大写成FS,一般也就叫fs这个名字。
    
  2. 调用api实现具体的需求

    
    fs.xxx()  // 这里的xxx是代指某个api
    

    fs是专门用来操作文件的核心模块

    readFile的作用

    读取文件内容 格式

image.png 说明:

  • 参数1:文件路径。 相对路径和绝对路径均可。

  • 参数2: 配置项,可不写。主要用来配置字符集。一般可设置为utf8,如果不设置该参数,文件内容会Buffer形式返回。

  • 参数3: 回调函数。这个回调函数在读完文件后自动被自动调用,并传入 err 和 data

    • 如读取成功,回调函数中的两个参数分别是:

      • err: null

      • data: 文件内容。如果不设置参数2,则返回二进制数据。可以使用 toString() 方法将二进制数据

        转为正常字符串

    • 如读取失败,回调函数中的两个参数分别是:

      • err: 错误对象
      • data: undefined

      示例1:读文本内容

目录结构


- 1.txt            # 文本文件
- 01.readFile.js   # 用来读取1.txt内容的代码

const fs = require("fs")
fs.readFile('1.txt',(err, data) => {
  console.log(data);
});

上面的data将会是一个Buffer对象,类似于数组。

  • 它的元素是16进制的两位数,它表示文件内容在计算机中的二进制格式。
  • 它有一个toString()方法,可以用来把内容以UTF-8的格式转成字符串。

示例2:读文本内容-指定编码格式


const fs = require("fs")
fs.readFile('1.txt', "utf8", (err, data) => {
  console.log(data);
});

示例3:读入图片文件


const fs = require("fs")
fs.readFile('./img/1.jpg',  (err, data) => {
  if (err) throw err;
  console.log(data);
});

经验:并不是所有的文件都应该转成字符串的

示例4:异步的效果

异步的


const fs = require("fs")
console.log(1)
fs.readFile('文件路径', "utf8", (err, data) => {
  if (err) throw err;
  console.log(data);
});
console.log(2)

fs模块-readFile-观察并处理错误

fs.readFile('00.text','utf8', (err, data)=>{ if(err) { console.log('err', err) return }

// 如果读入的过程出错,则err就表示错误,没有错误,err是null
// 如果读入的过程出错,则data是undefined; 没有错误,data就是读入的内容
// console.log('err', err)
console.log('data', data)
在node.js中遇到的错误之后,应该观察错误说明。

```

fs模块-writeFile-文件写入

writeFile

功能:向指定文件中写入字符串。

特点:


- 文件不存在时,则尝试创建该文件
- 它是覆盖写入:会把源文件中的内容全部删除,再填入当前的内容

格式:


fs.writeFile(pathName, content, option, (err)=>{});
// 参数1: 要写入的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
// 参数2: 要写入文件的内容,是字符串或者Buffer格式
// 参数3: 配置项,设置写入的字符集,默认utf-8
// 参数4: 写入完成后触发的回调函数,有一个参数 --- err (错误对象)

示例1: 写入普通字符串

const fs = require('fs') fs.writeFile('./a.txt', 'hello world! \n 换一行', err => { if (err) { console.info(err) } })

##注意:换行是\n

示例2: 写入json数据

稍微把问题提升一下,问: 如何把数据写入文件中?


const fs = require('fs')
​
const data = [{name: '小王', age: 20}]
fs.writeFile('./a.txt', data, err => {
  if (err) {
    console.info(err)
    throw err
  }
})

上面的写法会出错: data不是一个字符串或者是Buffer

正确做法是用JSON转一下。


const fs = require('fs')
​
const data = [{name: '小王', age: 20}]
fs.writeFile('./a.txt', JSON.stringify(data), err => {
  if (err) {
    console.info(err)
  }
})

fs模块-appendFile-文件追加写入

功能

向指定文件中写入字符串(追加写入), 如果没有该文件则尝试创建该文件。

格式


fs.appendFile(pathName, content, option, callback);
// 参数1: 要写入的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
// 参数2: 要写入文件的字符串
// 参数3: 配置项,设置写入的字符集,默认utf-8
// 参数4: 写入完成后触发的回调函数,有一个参数 --- err (错误对象)

示例


const fs = require('fs')
​
fs.appendFile('./a.txt', '\n 为天地立命', err => {
  if (err) {
    console.info(err)
    throw err
  }
})

\n : 表示换行

路径问题-获取绝对路径

__dirname,__filename

__filename 和 __dirname 是 Node.js 内置的全局变量

  • 特点是:不用声明就能直接使用

  • 全局变量的含义是:

    • 变量:它们的值是变化的。在不同的文件中值就不同。
    • 全局:在任意地方都可以直接使用。
  • 其中:

    __filename 表示当前文件的完整路径(包含文件名)

    __dirname 表示当前文件的完整存放目录(不包含文件名)

测试使用,在任意代码的任意位置


console.log(__dirname)
console.log(__filename)

在文件操作时,使用绝对路径

只需要在读入文件时,在路径前面拼接上:


// 拼接html5.jpg的绝对路径
// 1) 找到当前文件夹的绝对路径
console.log(__dirname)
const fs = require('fs')
// 2) 加上 html5.jpg
const filePath = __dirname + '\html5.jpg'
// 走一步,看一步
console.log(filePath)
// 3)读入文件
fs.readFile(filePath,function(err, data) {
  if(err) {
    console.log(err)
    return
  }
  console.log(data)
})
​
​

path模块-基本使用

作用

path也是node中的核心模块,作用是用来处理路径问题:拼接,分析,取后缀名等等。

文档地址

使用步骤

  1. 引入模块

const path = require('path')
  1. 使用模块

常用的api

  • path.basename():此方法返回 path 的最后一部分。一般可用来获取路径中的文件名。
  • path.join(): 路径拼接
  • path.extname(): 获取后缀名

示例


path.basename('/foo/bar/baz/asdf/quux.html');// 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');// 返回: 'quux'
path.dirname('/foo/bar/baz/asdf/quux');// 返回: '/foo/bar/baz/asdf'
path.extname('index.html');// 返回: '.html'

注意:不考虑其中地址是否真的存在,只是单纯调用方法,获取结果。

path模块-优化文件读写中的路径拼写

核心代码

path.join(__dirname, '文件相对地址')

示例


// 拼接html5.jpg的绝对路径
// 1) 找到当前文件夹的绝对路径
console.log(__dirname)
// 2) 加上 html5.jpg
const fs = require('fs')
const path = require('path')
const filePath = path.join(__dirname, 'html5.jpg')
// const filePath = __dirname + '\html5.jpg'
// 走一步,看一步
console.log(filePath)
​
fs.readFile(filePath,function(err, data) {
  if(err) {
    console.log(err)
    return
  }
  console.log(data)
})
​
​