有没有一种方法可以将变量从程序存储器存储到硬键保留功能

时间:2019-01-18 12:38:56

标签: javascript node.js

我试图将包含NodeJS中类的对象数组的变量保存到文件中,以便可以从那里重用它,而不必像这样重新获取它

const chatAPI = require("some_module");
const client = new chatAPI.Client("Auth-Key");
var channels = client.channels();
//Now channels is something I would like to use later on 

//Say
channels.forEach(channel => {channel.send("Hello")});

有什么方法可以将Channels变量保存到文件中,以便以后可以再次将其加载到程序存储器中并按原样使用它,而不必创建新的客户端并提取数据。

要进行详细说明,就像我让该程序在阻塞循环下运行一段时间,然后再使用该变量一样,在这种情况下,我将不必重新解析或重建数据。

3 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点,例如

let a = {foo: "bar" };
console.log("a", a);

fs.writeFileSync("./saved_data.json", JSON.stringify(a));

let b = require("./saved_data.json");
console.log("b", b);

您还可以:

let b = JSON.parse(fs.readFileSync("./saved_data.json"));
console.log("b", b);

现在您只能保存数据而不是方法!

如果要保留 object ,我将使用全局变量来存储它:

let globalObject = null;

someMethod.get((obj) => {
    // Save this for later use
    globalObject = obj;
})

// Later on
if (globalObject) {
    globalObject.doStuff();
}

答案 1 :(得分:0)

我在项目中使用了这两个函数,
它将数据存储在操作系统的默认AppData文件夹中:

const {
  app
} = remote
const fs = require('fs')

function get_option(file, callback) {
  fs.readFile(
    app.getPath('userData') + '\\user_data' + '\\' + file, 'utf8',
    function (err, data) {
      callback(err, data)
    }
  )
}

function set_option(file, data) {
  if (data) {
    fs.writeFileSync(
      app.getPath('userData') + '\\user_data' + '\\' + file, data
    )
  } else {
    fs.unlink(
      app.getPath('userData') + '\\user_data' + '\\' + file,
      function (err) {}
    )
  }
}

然后您可以执行以下操作:

set_option(
  'data.json',
  JSON.stringify(jsonObject)
)

get_option('data.json', function (err, data) {
  if (!err && data) {
    let jsonObject = JSON.parse(data)
    // Do something ..
  }
})

答案 2 :(得分:-1)

根据我的经验,对于一个小型项目,最好的选择是使用SQLite数据库,该数据库可以在没有任何数据库引擎的情况下使用,并且整个数据库本身只是一个易于移动的文件。这也支持(通常)标准的sql查询来插入,更新和选择。 只需在node.js中执行一个“ require”操作,即可在php,android和几乎任何其他平台上使用相同功能,而无需花费太多精力。

这是示例插入并选择

store.commitChanges()