小型本地 Json 数据库 - Node.JS 下 LowDB 的使用

LowDB 是一个小型的本地 JSON 数据库,可以省去连接 sql 数据库的麻烦,数据直接保存在本地 json 文件里。

一、项目地址

https://github.com/typicode/lowdb

二、安装

1
npm install lowdb

三、使用例子

1.引入

1
2
3
4
5
6
//引入 LowDB
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')

const adapter = new FileSync('./db/db.json')
const db = low(adapter)

2.设置默认数据结构

1
2
3
4
5
//设置默认数据结构 (如果你的 JSON 文件为空)
//推荐设置,不设置的话如果是新的 json 文件,或者变更了结构,会报错
db.defaults({
servers: []
}).write()

3.增

1
2
3
4
//插入数据 (以添加一个csgo服务器IP为例子)
db.get('servers')
.push({ name: 'ZombiEden ZE 1#', ip: 'csgoze.cn:27050'})
.write()

4.查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//查找全部数据
//为了更好的性能, 如果你只读而不写数据, 请使用 .value() 代替 .write()
db.get('servers')
.value()

//根据 name 字段查找数据(一条)
db.get('servers')
.find({ name: 'ZombiEden ZE 1#' })
.value()

//根据 name 字段查找数据(多条)
db.get('servers')
.filter({ name: 'ZombiEden ZE 1#' })
.value()

5.改

1
2
3
4
5
//更新数据
db.get('servers')
.find({ name: 'ZombiEden ZE 1#' })
.assign({ ip: 'csgoze.cn:27051'})
.write()

6.删

1
2
3
4
//删除数据
db.get('servers')
.remove({ name: 'ZombiEden ZE 1#' })
.write()

四、实例

上一篇博文介绍了 Discord BOT 的搭建,这里就试一下把 LowDB 用进去,实现 BOT 通过用户的指令去新增数据。

下面仅为部分关键代码,完整代码请参考我上一篇博文。

bot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
bot.on('message', function (user, userID, channelID, message, evt) {
//当接收到的信息以 '!' 开头时,进入判断
if (message.substring(0, 1) == '!') {
var args = message.substring(1).split(' ');
var cmd = args[0];

args = args.splice(1);

switch(cmd) {
case 'addserver':
//参数数量不对时,提醒用户命令格式
if (args.length!=3) {
bot.sendMessage({
to: channelID,
message: '<@'+userID+'> 新增要监测的服务器: `!addserver <csgo/css> <备注名> <IP>`\n参数用空格隔开,参数中不得含空格,不要使用双引号'
});
return;
}
AddServer(args[0], args[1], args[2], userID, channelID);
break;
}
}
}

function AddServer(Game, Name, IP, User, ChannelID) {
if (Game != "css" && Game != "csgo") {
bot.sendMessage({to: ChannelID, message: '<@'+User+'> 游戏类型只能为`css`或`csgo`' });
return;
}

var result = db.get('servers').find({ name: Name }).value();
if (result) {
bot.sendMessage({ to: ChannelID, message: '<@'+User+'> 备注名重复' });
return;
}

result = db.get('servers').find({ ip: IP }).value();
if (result) {
bot.sendMessage({ to: ChannelID, message: '<@'+User+'> IP重复' });
return;
}

db.get('servers')
.push({ game: Game, name: Name, ip: IP})
.write()

bot.sendMessage({ to: ChannelID, message: '<@'+User+'> 添加成功' });
}

其他的删除、更新、查找也是差不多的,照葫芦画瓢就好啦~