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 流