node

1. node.js的安装

2. 客户端与服务端

意思就是js文件是在客户端环境运行(在浏览器中打开)还是在服务端环境(直接终端运行命令 node index.js)运行

3.1 nodejs原生服务器

const http = require("http")
const server = http.createServer((req, res) => {
    res.write("使用node启动一个服务器")
    res.end()
})

server.listen(3000)

 4.1 node 模块 (遵循commonjs规范) 

http://nodejs.cn/learn/expose-functionality-from-a-nodejs-file-using-exports

const car = {
  brand: 'Ford',
  model: 'Fiesta'
}
module.exports = car
//在另一个文件中
const car = require('./car')

5.1 npm 包管理

npm i axios@0.19.2(安装指定版本)

开发依赖:只在开发环境中使用到的依赖,例如:eslint,less(生产环境是以css)等等

运行依赖:任何环境都用到的依赖,例如:jquery

"dependencies": {},       // 运行依赖
"devDependencies": {},  // 开发依赖 

6.1 fs模块 (文件操作(读取和写入))

const fs = require("fs")

// 文件写入
// a:追加写入; w:写入; r:读取
// fs.writeFile("1.txt", "追加的文字",{flag: "a"}, function(err) {
//   if(err) {
//     return console.log(err)
//   }
//   console.log("文件写入成功")
// })

// 文件读取 
// fs.readFile("1.txt", "utf-8", function(err, data) {
//   if(err) {
//     return console.log(err)
//   }
//   console.log(data)
// })

// 所有文件操作 没有Sync都是异步 否则是同步
// let data = fs.readFileSync("1.txt", "utf-8")
// console.log(data)

// 修改文件名
// fs.rename("1.txt", "2.txt", err => {
//   if(err) {
//     return console.log(err)
//   }
// })

 6.2 文件夹目录操作

// 目录(文件夹)操作

// 创建目录
//  fs.mkdir("11", err => {
//    if(err) {
//      return console.log(err)
//    }
//    console.log("创建目录成功")
//  })

// 修改目录名称
// fs.rename('11', '22', err => {
//   if (err) {
//     return console.log(err)
//   }
//   console.log("修改目录成功")
// })

// 读取目录
// fs.readdir("22", (err, data) => {
//   if(err) {
//     return console.log(err)
//   }
//   console.log(data)
// })

// 删除目录 (空文件夹/目录)
// 想要删除文件夹,可以通过删除文件夹里面的文件,当不确定文件夹里面是否还有文件夹时,利用递归的方法
// fs.rmdir("11", err => {
//   if(err) {
//     return console.log(err)
//   }
//   console.log("删除目录成功")
// })

// 删除文件
// fs.unlink("11.html", err => {
//   if (err) {
//     return console.log(err)
//   }
//   console.log("删除文件成功")
// })

// 判断文件/目录 是否存在
// fs.exists("22", exists=> {
//   console.log(exists) // 返回布尔值
// })

// 获取文件或者目录的详情信息
// fs.stat("22", (err, stat) => {
//   if(err) {
//     return console.log(err)
//   }
//   // console.log(stat)
//   // 判断文件是否是文件
//   let res = stat.isFile()
//   // 是否是文件夹
//   // let res = stat.isDirectory()
//   console.log(res)
// })

 7.1 Buffer(缓冲区)

https://www.runoob.com/nodejs/nodejs-buffer.html

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。

但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存

Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换
创建 Buffer 类
Buffer 提供了以下 API 来创建 Buffer 类:

Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
Buffer.allocUnsafeSlow(size)
Buffer.from(array): 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
Buffer.from(buffer): 复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例
Buffer.from(string[, encoding]): 返回一个被 string 的值初始化的新的 Buffer 实例
// 创建一个长度为 10、且用 0 填充的 Buffer。
// const buf1 = Buffer.alloc(10);
// console.log(buf1)

// const buf2 = Buffer.from("范顺");
// console.log(buf2); // <Buffer e8 8c 83 e9 a1 ba>

// const buf3 = Buffer.from([0xe8, 0x8c, 0x83, 0xe9, 0xa1, 0xba])
// console.log(buf3)  // <Buffer e8 8c 83 e9 a1 ba>
// console.log(buf3.toString()) //范顺

// 一个汉字的为3个字节,会出现乱码的情况
// 如果知道其编码格式,利用concat方法
const buf4 = Buffer.from([0xe8, 0x8c, 0x83, 0xe9])
const buf5 = Buffer.from([0xa1, 0xba])
// console.log(buf4.toString())  // 范�
// const newbuffer = Buffer.concat([buf4, buf5])
// console.log(newbuffer.toString()) //范顺

// 不用concat方法,node内置的这个模块会关联
let { StringDecoder } = require("string_decoder") 
let decoder = new StringDecoder()
let res1 = decoder.write(buf4)
let res2 = decoder.write(buf5)
console.log(res1)
console.log(res1 + res2)

8.1 stream 流

原文地址:https://www.cnblogs.com/shun1015/p/13183766.html