45

我正在寻找一种超级简单的方法来在Node.js下以持久方式存储一个JSON数组。它不需要有任何特殊功能。我只想在其中放置一个 JSON 对象,并能够在下次服务器重新启动时读取它。

(像MongoDBCouchDB这样的解决方案对于这个目的来说似乎都过大了。)

4

9 回答 9

82

为什么不写入文件?

// Writing...
var fs = require("fs");
var myJson = {
    key: "myvalue"
};

fs.writeFile( "filename.json", JSON.stringify( myJson ), "utf8", yourCallback );

// And then, to read it...
myJson = require("./filename.json");

请记住,如果您需要反复读写,则必须为您反复读取的每个文件清除 Node 的缓存,否则 Node 将不会重新加载您的文件,而是产生它在第一次require调用期间看到的内容。幸运的是,清除特定需求的缓存非常容易:

delete require.cache[require.resolve('./filename.json')]

另请注意,如果(从节点 12 开始)您使用的是 ES 模块而不是 CommonJS,则该import语句没有相应的缓存失效。相反,使用动态 import(),然后因为导入来自 URL,您可以添加查询字符串作为缓存清除的形式作为导入字符串的一部分。

或者,为了避免任何内置缓存,请使用fs.readFile()/fs.readFileSync()而不是 require(如果您正在编写基于 Promise 的代码,则使用fs/promises而不是fs使用 async/await 显式或隐式)

于 2013-02-18T15:11:10.257 回答
9

试试 NeDB:https ://github.com/louischatriot/nedb

“Node.js 的嵌入式持久数据库,用 Javascript 编写,没有依赖项(当然 npm 模块除外)。您可以将其视为 Node.js 项目的 SQLite,可以与简单的 require 语句一起使用。API是 MongoDB 的子集。您可以将其用作持久性或仅内存数据存储。”

于 2015-01-16T22:54:45.227 回答
5

我找到了一个名为json-fs-store 的库,用于将 JavaScript 对象序列化为文件中的 JSON 并稍后检索它。

通过该store.load方法(目前未在文档中描述)检索文件时,它被解析JSON.parse为比require在另一个答案中执行类似操作更好:

  • 当内容格式错误时,您会得到适当的错误处理
  • 如果有人设法将 JavaScript 代码潜入文件中,则会导致解析错误,而不是 JS 被执行。
于 2013-06-25T15:48:29.140 回答
4

如果您正在寻找性能考虑:LokiJS

https://www.npmjs.com/package/lokijs

http://lokijs.org/#/

于 2016-04-08T08:33:29.833 回答
4

如果您需要简单的数据存储,无需外部进程,性能非常高且稳定,您可能会喜欢Rocket-store。它使用起来非常简单,包含该模块,您就可以立即开始插入记录。

它具有三个主要方法:putgetdelete(以及一些特殊的方法和选项设置)

例子:

// collection/table = "cars", key = "Mercedes"
result = await rs.post("cars", "Mercedes", {owner: "Lisa Simpson", reg: "N3RD"});

// Get all records from "cars" collection
result = await rs.get("cars","*");

// Delete records in collection "cars" where keys match "*cede*"
result = await rs.delete("cars","*cede*");

它依靠底层文件系统缓存来优化速度,并且可以处理数百万条记录。

你会得到简单的序列、自动递增和其他次要的便利,但仅此而已。没有什么花哨。当我需要一个简单的存储解决方案时,我非常喜欢它,但作为作者,我也非常有偏见;)

于 2019-06-14T05:59:10.577 回答
3

您可以将 JSON 数据保存在一个简单的文本文件中,并在服务器重新启动时读取它。

const data = require("yourarrayfile.json");

然后像往常一样使用它。

于 2013-02-18T15:07:23.417 回答
2

试试LowDB

Lowdb 是一个由 Lodash 提供支持的小型本地 JSON 数据库(支持 Node、Electron 和浏览器)。如果您了解 Lodash,那么您已经知道如何使用 Lowdb。

于 2019-10-30T13:48:29.817 回答
1

虽然 LokiJS 和 NeDB 看起来都有更多的用户,但我只是遇到了TaffyDB。虽然我自己没有尝试过,但我想我应该在这里添加它以保持完整性。

于 2016-10-28T13:25:31.867 回答
-1

建议节点的 fs 系统的用户我必须同意。如果 mongoDB 等已经过大了,其他人都在建议对我来说似乎总体上的东西。简单的语言环境存储或节点的 fs 库。

我记得当我开始我的 web 开发之旅时,我对通过 mongoDB 等学习持久数据存储技术的了解还不够。但是 node 的 fs 库为我的一些早期应用程序做了诀窍。即使重新启动本地服务器,所有数据也保持不变

于 2021-06-06T13:44:18.257 回答