动态提出的数据怎么换行 js_Node.js实战13:fs模块奥义!开发一个数据库

本文,将使用fs开发一种简单的文件型数据库。

数据库中,记录将采用JSON模式,内容型如:

{"key":"a","value":"123"}

支持查询、更新、删除操作。

代码分两部分,一部分是我们将其写为模块,另一部分,是对该模块的调用。

直入主题,

模块部分(文件名:database.js):

//核心模块var fs = require("fs");var event_emitter = require("events").EventEmitter;//我们的数据库,初始化参数是数据库路径(含文件名)var database = function(path){ this.path = path; this.records = Object.create(null); //流,写文件 this.write_stream = fs.createWriteStream(this.path,{encoding:"utf8",flags:"a"}); this.load()}//类式继承,让database具备事件能力database.prototype = Object.create(event_emitter.prototype);//异步操作,通过EventEmiter实现:在加载完记录后,发出load事件。database.prototype.load = function(){  //流,读文件 var stream = fs.createReadStream(this.path,{encoding:"utf8"}); var database_this = this; var data = ""; //流的读取事件 stream.on("readable",function(){ data += stream.read(); //以换行为分割 var record_stream = data.split("");  data = record_stream.pop();  for(var i=0; i

重点解析:

1、EventEmitter继承,让本模块具有“事件”触发能力,可以在调用时使用on函数;

2、实例化时,输入数据库路径(如不存在,会自动创建);

3、load、get、set、del函数的实现;

4、回车换行,;

5、emit触发load事件,load事件会在调用上层响应;

6、为什么用pop();

调用部分(test13.js):

var database = require("./database");var client = new database("./test13.db");client.on("load",function(){ console.log("loaded"); console.log( client.get("my site") ); client.set("my site","jshaman.com",function(err){ console.log("write",err); }) client.del("test2");});

重点解析:

1、初始始化模块、传入数据库路径;

2、响应load事件,即:数据库加载完成;

3、读取、设置、删除各函数的调用。

执行效果:

282183a7c7a8c3c417b06cb3f0c40702.png

数据库内容:

4012e9363b0b968344d18b54d8ae413b.png

更多本系列文章:

Node.js实战12:fs模块高级技巧

Node.js实战11:fs模块初探

Node.js实战10:“流”是Node.js最强大的功能之一

Node.js实战9:用EventEmitter触发和响应事件

Node.js实战8:可用于压缩、加密的zlib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值