3

我有一个在嵌入式 Linux 系统上运行的 Node.js Web 服务器。对于身份验证,我目前正在使用 Passport 的本地策略,并且用户帐户信息存储在 Node 脚本本身中,如下所示。

var users = [
    { id: 1, username: 'bob', password: 'secret', email: 'bob@example.com' }
  , { id: 2, username: 'joe', password: 'birthday', email: 'joe@example.com' }
];

它可以工作,但我想将用户名和密码存储在一个单独的文件中,并能够通过 Web 浏览器界面添加、删除和更改用户。我不想使用数据库服务器来存储用户帐户,因为我觉得这对我的嵌入式系统来说开销太大。

有谁知道将用户帐户存储在一个单独的文件中的好方法,可能还有一个库来帮助更新帐户?

编辑: 节点服务器在电子硬件上运行,用户很少(可能有 2-20 个),所以人们互相踩踏进行用户列表更新应该没有问题。初始设置后,用户列表不会有太大变化。

4

3 回答 3

4

您可能已经意识到以明文形式存储密码是一个坏主意。至少,我建议使用bcrypt进行散列。但是,这不是问题所在,所以我们将继续前进。:)

你有几个选择:

  1. JSON.stringify使用和手动读取数据并将其保存到磁盘JSON.parse。将数据加载到内存中,当数据发生变化时,将其序列化回磁盘。
  2. 使用Persistance,一个支持内存存储并自动为您持久保存到磁盘的 Node 模块(与 #1 基本相同,但已经构建。:)
  3. 使用SQLite,它为您提供 RDBS 的大部分功能,但序列化为文件而不需要运行的服务器。
于 2012-06-20T20:10:06.593 回答
3

一个非常简单的方法是从 JSON 文件中读取。在更新时写入accounts.json.(process id).tmp文件并将其重命名为accounts.json. 如果两个同时进来,你会丢失一个更新的风险很小,但也许你可以忍受。(如果您不能使用“真实”数据库来获取“真实”的某些值)。

您可以使用JSON.stringify(data)将数据结构JSON.parse(json)转换为 JSON 并将 JSON 字符串从文件转换为数据结构。

如果您的服务/服务器没有足够的使用,您可以阻止您可以读取帐户

var data = JSON.parse(fs.readFileSync( file_name ) );
于 2012-06-20T20:05:42.413 回答
0

我完全不知道你使用的所有三个标签,但我被你的问题所吸引,你在问一个基于简单文本文件的数据库。如果您发现我的回答无关紧要,请不要介意,因为我来自完全不同的背景。

看看 MongoDB。它是一个面向文档的 DBMS,在处理大量文档时非常有用。

MongoDB 使用 BSON,一种类似于 JSON 的二进制对象格式,但比 JSON 更具表现力。它是一个 NOSQL 数据库,它以 BSON 格式存储具有动态模式的结构化数据,而不是像在“经典”RDBMS 中那样将数据存储在表中。

如果您觉得它很吸引人,您可以访问此链接了解更多详细信息:MongoDb

于 2012-06-20T20:16:40.000 回答