Node.js数据持久化-writeFile和readFile应用

301 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

什么是持久化

对于计算机理论来讲,是把业务模型存储到磁盘里,但是存储到内存里并不是真正的持久化,因为断电关机存储的数据就会消失,所以需要存储到磁盘里才算是持久化。

存储的手段

把业务模型存储到磁盘里,至少有两种常用的方式:

  1. 存储到关系MySQL关系数据库
  2. mongodb非关系型存储服务

存储实现持久化

什么时候需要数据库

如果存储的数据量较小而且数据类型的种类比较单一,是不需要数据库的,反之则需要数据库的加持

数据存储到本地文件系统

实现持久化不一定需要数据库,那把数据存到本地,在java中是把数据存储成csv格式文件,Nodejs存储比较简洁,把JSON的字面量序列化后直接存储

  1. 写入和读取流程 首先通过fs.readFile解析读取JSON文件,并转换成字面量格式,再通过fs.writeFile写入到该文件内
const fs = require("fs");
function setVal(key, value) {
    fs.readFile("./test.json", (err, data) => {
        const json = data ? JSON.parse(data) : {};
        // 读取成功
        fs.writeFile("./test.json", JSON.stringify(json = json[key]), err => {
            if (err) {
                console.log(err);
            }
            // 写入成功
        });
    });
}

注意!存储时需要再把该文件格式转换成JSON字符串

  1. 运行存储 通过调用命令行接口来运行存储机制,命令行读取实际上是运行了文件流机制
//命令行
set a
get a

运行Nodejs进程,通过process,再内读取实际上是stdin流,输出是stdOut读取流的时候希望把整个流,每次再命令行输入完成后按下回车开始执行,通过readLine库实现

const readline = require("readline"); 
const rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout 
}); 
rl.on("line", function(input) { 
    const [op, key, value] = input.split(" "); 
    if (op === 'get') { 

    } else if (op === 'set') { 
        setVal(key, value) 
    } else if(op === 'quit'){ 
        rl.close(); 
    }else { 
        console.log('没有该操作'); 
    } 
});

rl.on('line')每次点击回车时,回调on方法,内有三个参数op, key, value,根据输入的值来进行判断

结束该程序,执行rl.on('close')回调

rl.on("close", function() { 
    process.exit(0); 
});