【问题标题】:How can i create an array as a database with JSON files and use Javascript to update / save it如何使用 JSON 文件创建数组作为数据库并使用 Javascript 更新/保存它
【发布时间】:2019-09-19 21:57:50
【问题描述】:

我在 Node.js 中制作了一个不和谐机器人,主要是为了好玩,以便更好地编码,我希望机器人将字符串推送到数组中并永久更新数组文件。

我一直在为我的数组使用单独的 .js 文件,例如:

module.exports = [
  "Map: Battlefield",
  "Map: Final Destination",
  "Map: Pokemon Stadium II",
];

然后在我的主文件中调用它们。现在我尝试使用 .push() ,它会添加所需的字符串,但只有一次。

拥有一个可以更新和保存输入的数组的最佳解决方案是什么?显然 JSON 文件对此有好处。

谢谢,卡尔

【问题讨论】:

  • 您可以使用node-json-db 允许您将 JSON 文件用作“数据库”并公开诸如“推送”之类的方法

标签: javascript arrays node.js json


【解决方案1】:

恭喜您有了编写机器人的想法,以便进行一些编码练习。我打赌你会成功的!

我建议你试着把你的问题分成小块,这样会更容易推理。

Step1 - 存储

我同意你使用 JSON 文件 作为数据存储。对于一个旨在成为“健身房”的应用程序来说已经绰绰有余了,你可以在世界上所有的时间开始研究 Postgres、MySQL 或 Mongo 等数据库。

用于存储值列表的 JSON 文件可能如下所示:

{
  "values": [
    "Map: Battlefield",
    "Map: Final Destination",
    "Map: Pokemon Stadium II"
  ]
}

当您将这段代码保存到 list1.json 时,您就有了第一个数据文件。

Step2 - 阅读

在 NodeJS 中读取 JSON 文件 很简单:

const list1 = require('./path-to/list1.json');
console.log(list.values);

这将在您的应用启动时将文件的全部内容加载到内存中。您还可以使用file system API 了解更复杂的文件读取方式。

Step3 - 写作

您似乎知道如何使用 push()splice() 等 API 解决内存中数组修改

修复内存表示后,您需要将更改保存到文件中。您基本上必须以 JSON 格式写下来。

选项 n.1:您可以使用 Node 的文件系统 API:

// https://stackoverflow.com/questions/2496710/writing-files-in-node-js
const fs = require('fs');

const filePath = './path-to/list1.json';
const fileContent = JSON.stringify(list1);

fs.writeFile(filePath, fileContent, function(err) {
  if(err) {
    return console.log(err);
  }

  console.log("The file was saved!");
}); 

选项 n.2:您可以使用 fs-extra,这是对基本 API 的扩展:

const fs = require('fs-extra');

const filePath = './path-to/list1.json';

fs.writeJson(filePath, list1, function(err) {
  if(err) {
    return console.log(err);
  }

  console.log("The file was saved!");
});

在这两种情况下,list1 都来自前面的步骤,它是您在内存中修改数组的地方。

注意异步代码:

两个写作示例都使用non-blocking asynchronous API calls - 链接指向一篇不错的文章。

为简单起见,您可以首先使用 同步 API,它基本上是:

fs.writeFileSync
fs.writeJsonSync

您可以在上面的链接中找到所有详细信息。

享受机器人编码的乐趣!

【讨论】:

  • 非常感谢您,它非常详细,正是我需要的帮助!我今天要用这个,看看效果如何,感谢您花时间为我回答这个问题!
  • 不客气,记得把你的经验传授给其他人 :-)
  • 你好,只有我!我已经使用了示例代码并设法更新了 JSON 文件中的数组。但是目前我只能让它覆盖 JSON 文件而不是附加到数组的末尾。我不知道从这里去哪里.. 任何见解将不胜感激!我不确定是否需要使用 for(var i in 'my_array')
  • 上面的代码示例非常简单,是的,如果您遵循您的应用程序最终会覆盖该文件。这通常是基本应用程序或开发练习中可接受的行为。如果你想继续前进,一个简单而有价值的经验就是研究数据库。我可以推荐 Postgres 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2020-11-07
  • 2014-10-24
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多