【问题标题】:How to declare a static array in Node.js?如何在 Node.js 中声明一个静态数组?
【发布时间】:2020-08-10 09:39:09
【问题描述】:

我正在尝试创建一个名为“categories”的静态数组,我希望它在我的 Node.js 应用程序中被初始化一次。我的意思是,当我关闭应用程序并再次运行它时 - 我希望它保持“类别”数组的状态。 发生的情况是,每次运行此应用程序时都会初始化数组。虽然我希望它在这个应用的生命周期中只声明一次。

router.post("/add_category", (req, res, next) => {
   var category = req.body.category;
   categories.push(category);
   res.render("index", { categories });
});

【问题讨论】:

  • 数组categories声明在哪里?
  • 现在,我在索引路由器中将其声明为全局变量。
  • “我的意思是,当我关闭应用程序并再次运行它时 - 我希望它保持“类别”数组的状态。”在我看来,数据库的定义。
  • 您可以尝试使用 fs.writeFile 或 readFile 函数来持久化 JSON.stringified 对象,如数组。但是数据库会更好。
  • 是的,我考虑过那个解决方案,但只有少数条目是浪费的......难道不能将它存储在静态数组中吗?

标签: javascript arrays node.js static javascript-objects


【解决方案1】:

您应该需要一个数据库来实现这种数据持久性。但有时,一个成熟的数据库(MongoDB、SQL)可能被认为是矫枉过正,因为您只需要保存一个简单的数组。 因此,考虑使用“node-persist”包,这是一个可能的解决方案:

const storage = require('node-persist');
storage.initSync();
storage.setItem('categories', [ . . . ] );
console.log(storage.getItem('categories'));

【讨论】:

    【解决方案2】:

    最简单的解决方案是将数组作为 JSON 写入文件,然后在服务器启动时重新加载。

    let categories = require('./categories.json');
    
    router.post("/add_category", (req, res, next) => {
       var category = req.body.category;
       categories.push(category);
       fs.writeFile(`./categories.json`, JSON.stringify(categories), () => {
           res.render("index", { categories });
       });
    });
    

    Node.js 本身没有任何自动持久化的变量,这些变量会自行保存到磁盘,并且在您下次运行程序时自动可用。您必须自己编写代码。

    【讨论】:

    • @JonathanMorag - 注意,您应该在运行程序之前创建一个默认的./categories.json 文件或修改代码以处理最初不存在的文件。
    【解决方案3】:

    那是数据库的用途。考虑使用一些 SQL 或 noSQL 数据库,即使服务器重置也会存储值。

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多