所以我有一个非常大的对象,我用它来控制nodejs app中的东西。有时我会将此对象存储在数据库[mysql]中,因此如果进程崩溃或重新启动并且某些内容已更改,则更改将被保存。很简单。
对象是:http://snippi.com/s/z5nq0v5
它被定义为global.config。
所以要存储,我使用我的保存功能:
client.query('SELECT data FROM settings WHERE (id = \''+ config.room +'\')',
function(a, b, c) {
if (!b[0]) {
client.query('INSERT INTO settings (id, data) VALUES (?, ?)', [config.room, JSON.stringify(config)],
function (a) { if (a) throw a;Log("Saved settings"); }
);
} else {
client.query('UPDATE settings SET data="?" WHERE id="'+config.room+'"',
[JSON.stringify(config)],
function (a) { if (a) throw a;Log("Saved settings"); }
);
}
}
);
这似乎有效。但是,当我在更改某些内容后尝试加载它并保存时, 我收到一个错误。这是加载代码:
client.query('SELECT data FROM settings WHERE (id = \''+ config.room +'\')',
function(a, b, c) {
console.log(b.length);
if (a) return console.log(a);
if (!b[0]) return db.save("settings");
console.log(b[0].data);
config = JSON.parse(b[0].data);
Log("Loaded Settings");
}
);
正如您所看到的,我正在做的就是调用我之前刚刚编译的对象的JSON.parse()。然而,我收到了一个错误。错误是
undefined:1
3Th0seB310W","ui
^
SyntaxError: Unexpected token '
但是在它所谈论的领域没有'。如果您在那里引用该对象。
这些是console.log(b [0] .data)的结果:http://snippi.com/s/tknlgyo
任何帮助将不胜感激,如果需要,我会添加更多信息。 注意:auth代码显然已被更改,但它只是一个十六进制值,如下面的uid,只是更长。
答案 0 :(得分:0)
console.log的输出有单引号。这意味着您尝试解析的字符串具有它们。在解析之前去除它们。
例如,这是一个使用节点的会话:
> console.log("abc")
abc
您发布的代码段显示了单引号。节点没有把它们放在那里,所以他们必须早些时候以某种方式获取你的数据。确保在生成和存储字符串时禁止这些。