node js里面的fs内置模块的异步同步读取写入用法,http内置模块创建服务器用法

856 阅读5分钟

node js

node js概念

1652185307535.png

fs:node js里面的内置读写模块

导包:const fs = require("fs"),就是引入内置模块

1.异步读取 : 模块名.readFile('文件路径'[,选项], function (err, data)

2.异步写入:模块名.writeFile('文件路径'[,选项], function (err)

3.同步读取: 模块名.readFileSync("./4-1内容.txt"),(详细写法在下面)

4.同步写入: 模块名.writeFileSync("./4-1内容.txt"),

1.异步读取文件

异步是不看书写顺序来返回结果的,是看读取的内容大小来区分顺序的

1652185373232.png

1652185419748.png

1652185575008.png

//导入模块
const fs = require("fs");
//1.err错误对象读取成功显示null
//2.data读取成功显示内容  读取失败显示  undefined
//总结 err和data只能存在一个,成功或失败
//模块名.readFile('文件路径'[,选项], function (err, data)
fs.readFile("./4-1内容.txt", (err, data) => {
  console.log("err", err);
  //data: 文件内容,如果不设置参数2,则返回二进制数据。可以使用 toString() 方法将二进制数据转为正常字符串
  console.log("data", data.toString());
});

2.异步写入文件

如果文件不存在会尝试自动创建文件,实在创建不了(比如文件不存在,磁盘不存在)才会显示错误

//导入模块
const fs = require("fs");

//writeFile  异步写入  路径后面是要写入的内容  然后是回调数据
fs.writeFile("./4-1内容.txt", "牛批", (err) => {
  //如果没错误err为null
  if (err) return console.log("写入失败");
  console.log("写入成功");
});
//总结:1.覆盖写入(全清写入新的)
//2.如果文件不存在会尝试自动创建文件,实在创建不了(比如文件不存在,磁盘不存在)才会显示错误
//3.异步是不看书写顺序来返回结果的,是看读取的内容大小来区分顺序的

3.同步读取文件

同步是严格按照书写顺序来执行的,因为同步没有返回值,所以要定一个变量来接受读取到的数据,log一下data即可

const fs = require("fs");
//sync  同步的意思
console.log(1111);
const data = fs.readFileSync("./4-1内容.txt");
console.log(222);
console.log("文本", data.toString());
console.log(3333);
const data2 = fs.readFileSync("./4-1内容.txt");
console.log("文本", data2.toString());
console.log(5555);

//总结:同步是严格按照书写顺序来执行的

4.同步写入文件

同步没有返回值,所以要借助try {} catch (error) {}这个方法来获得提示,用起来比异步麻烦

const fs = require("fs");

try {
  //写入成功
  fs.writeFileSync("./4-1内容.txt", "牛啊");
  console.log("成功");
} catch (error) {
  //失败
  console.log("失败");
}
//总结:同步没有返回值,所以要借助try {} catch (error) {}这个方法来获得提示,用起来比异步麻烦

创建服务器

HTTP:就是node js里面的内置模块,作用是创建一个服务器

//导包
const http = require("http");
//1.request  请求(对象) 简写req;2.response  响应(对象) 简写res;  3.createServer()http内置模块的创建服务器方法
const server = http.createServer((request, response) => {
  console.log("接收到了客户端请求");
  response.end("cpdd");
});
//开始监听
server.listen(8001, () => {
  console.log("客户端请求成功");
});
//总结:1.要先在node js发送请求
//2. 去网页地址栏输入 127.0.0.1   本机的本地服务器地址(注意点:所以标点符号都要英文状态下)然后冒号加8001(8001自己定义的)

使用案例-复制一张图片

使用了异步读取加写入(就是先读取到然后再创建一个没有的地址来利用自动创建特性来生成)

const fs = require("fs");
//读取
fs.readFile("./壁纸4.jpg", (err, data) => {
  if (err) return console.log("读取失败");
  //写入
  fs.writeFile("./壁纸5.jpg", data, (err) => {
    if (err) return console.log("写入失败");
    console.log("写入成功");
  });
});

使用案例-服务器随机显示数组里面的内容

使用了创建服务器和math的随机数方法

//导包
const http = require("http");
//定义数组
const arr = [
  "1、阿呆:我站在女友的窗下对她唱情歌,她扔给我一枝花。阿瓜:那你头上的伤是怎么回事?阿呆:她忘记把花从花盆里取出来了。",
  "2、天蓝蓝,草青青,非典疫情悍人心。毋害怕,莫担心,开开心心就没病。多锻炼,勤保洁,健康快乐就会永远伴着你!",
  "3、亲爱的,真的要见面吗?那你得答应:如果我转身就跑,千万别拉我。若我当场晕倒,你要替我做人工呼吸,记住吸的时候要用力。",
  "4、一位教师见学生递上书来,打算找一个“川”字来教他,忽然看见个“三”字,就骂道:我到处寻你,你却躺在这里睡懒觉!",
  "5、宾客得意如醉酒,美人含笑心泪流。堆来枕上愁何状,夜长天色总难明。寂寞披衣数寒星,晓来百念都灰尽,一钩残月向西流!",
];
//1.request  请求(对象) 简写req;2.response  响应(对象) 简写res;  3.createServer()http内置模块的创建服务器方法
const server = http.createServer((req, res) => {
  console.log("接受客户端请求");
  //解决中文字符在浏览器显示乱码问题
  res.setHeader("content-type", "text/html;charset=utf8");
  //定义一个四舍五入加取0-1的math方法
  const num = Math.round(Math.random() * (arr.length - 1));
  //服务器随机显示数组里面的内容
  res.end(`${arr[num]}`);
});
//监听
server.listen(8003, () => {
  console.log("请求成功");
});
//去网页地址栏输入 127.0.0.1  本机的本地服务器地址(注意点:所以标点符号都要英文状态下)然后冒号加8003 (8003自己定义的)

使用案例-fs模块写读写

就是用利用fs模块没有地址会自动创建的特性先写生成一个文件,然后读取这个文件,再写入,达成先写再读取再添加的效果(注意点:json文件不能有注释,不然会报错)

//导包
const fs = require("fs");
//定义要写入的内容
const obj = [{ name: "后裔", skinname: "精灵王" }];
//定义要添加的内容
const obj1 = { name: "程咬金", skinname: "功夫厨神" };
//写入
fs.writeFile("./data1.json", JSON.stringify(obj), (err) => {
  if (err) return console.log("写入失败");
  console.log("写入成功");
});
//读取
fs.readFile("./data1.json", (err, data) => {
  if (err) return console.log("读取失败");
  //3.把字符串转为数组
  let arr = JSON.parse(data.toString());
  //4.追加一条数据到数组中(内存中追加)
  arr.push(obj1);
  //5.写入文件,注意参数二需要转字符串
  fs.writeFile("./data1.json", JSON.stringify(arr), (err) => {
    //6.写入失败或成功提示
    if (err) return console.log("写入失败");
    console.log("写入成功");
  });
});