Node.js定义
是一个基于chrome v8引擎的JavaScript运行时环境
与浏览器区别
Node.js没有DOM,BOM,window对象
学习大纲
- 内置模块
- 自定义模块
- 第三方模块
- npm工具安装,写在第三方包
- 为vue等框架打下基础
require导入模块
-
const 变量(一般与模块名统一)=require('核心模块名') -
例如:导入fs和Path核心模块
const fs = require('fs')读取文件
异步读取
- 读取成功,
error值为null,并且有data - 读取失败,有
error值,data值为undefined
const fs = require("fs"); fs.readFile("./05-hello.txt", (err, data) => { if (err) return console.log("读取文件失败"); console.log("读取到文件内容:", data.toString()); });同步读取
- 读取时直接返回数据
const fs = require("fs"); const data1 = fs.readFileSync("./05-hello.txt"); const data = fs.readFileSync("./bg.png"); console.log("text", data1.toString()); console.log("图片", data);捕获
const fs = require("fs"); try { const data = fs.readFileSync("./055-hello.txt"); console.log(data.toString()); } catch (error) { console.log("读取失败"); } - 读取成功,
写入内容
异步写入内容(常用)
fs.writeFile(path,data[,option],callback)- 覆盖式写入,后面的内容会将前面的内容覆盖
- 参数:(被写入路径,写入内容(字符串格式),文件参数配置默认utf8,完毕回调函数)
- 没有对应的文件时,程序会尝试创建文件
const fs = require("fs");
fs.writeFile("./05-hello.txt", "hello 我来了 我要异步覆盖你", (err, data) => {
if (err) return console.log("写入失败");
console.log("写入成功");
});
数组转换字符串写入
const fs = require("fs");
const arr = [{ id: 1 }];
fs.writeFile("./05-hello.txt", JSON.stringify(arr), (error) => {
if (error) return console.log("写入失败");
console.log("写入成功");
});
-
读取json数据文件,转换格式添加写入新数据
// 1.导入模块 const fs = require("fs"); // 2.难道前端传来的数据 const obj = { name: "刘备" }; // 3.读取文件 fs.readFile("./13-data.json", (err, data) => { // 4.判断是否失败 if (err) return console.log("读取失败"); console.log("读取成功"); // 5.将成功读取的buffer数据格式转成对象格式 const arr = JSON.parse(data.toString()); // 6.将前端给的数据新加进数组 arr.push(obj); // 7.开始写入文件 fs.writeFile("./13-data.json", JSON.stringify(arr), (err) => { // 8.判断是否写入失败 if (err) return console.log("写入失败"); console.log("写入成功"); }); });同步写入内容(不常用)
- 提示用户错误还要套多一层trycatch语法,增加代码量(不推荐)
const fs = require("fs");
try {
fs.writeFileSync("./05-hello.txt", "I am boy");
console.log("写入成功");
} catch (error) {
console.log("写入错误");
}
HTTP模块
基础语法
// 1.带入http模块
const http = require("http");
// 2.声明变量存放创建的服务
const server = http.createServer((req, res) => {
console.log("接收到了客户端请求");
res.end("response is already");
});
// 3.监听端口号并启动web服务器等待客户端发起请求,接着打开浏览器客户端发起端口请求
server.listen(8080, () => {
console.log("web服务器准备就绪:127.0.0.1:8080可以访问");
});
第三方
模块化
-
导出
- 每个js文件看作是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容
-
导入
-
作用
- 能够对一类功能做分类管理
- 能够保护成员不被污染
- 不用考虑导入顺序
- 按需导入,可以随时更换模块,维护方便
express
-
作用
-
使用更方便
-
在文件夹中打开cmd
npm init -
输入上述命令后,提示输入项目名字(英文小写),输入后一直回车,生成package.json
npm install express -
等待安装express完成
-
配置淘宝镜像地址可以提升速度
npm config set registry https://registry.npm.taobao.org
npm
-
通过npm可以下载所需要的资源,例如express, flexible, echarts, bootStrap……
-
通常情况执行
npm init回车,后续会有好几行要按回车-
省略要按回车的写法(前提是只做本地项目,并且根目录名字没有特殊符号或中文)
npm init -y
-
-
不小心把依赖包删除的时候,package.json文件会记录本项目所用到的包名和版本,执行命令可以把所记录的依赖包下载回来
npm i -
全局装包
npm i 包名 -g -
卸载包
npm un dayjsnpm un dayjs -g
dayjs
-
更方便的输出格式化时间
// 导包 const dayjs = require("dayjs"); // 输出格式化时间 console.log(dayjs().format("YY/MM/DD hh:mm:ss"));
拓展
-
数组
filter()-
将符合条件的内容返回新数组
const newArr = arr.filter((value) => value === num); -
找到数组中符合条件的目标并返回
const stu = arr.find(item => item.id === Number(req.body.id))
-