0

所以我有一个非常大的对象,我用它来控制 nodejs 应用程序中的东西。有时我将此对象存储在数据库 [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 一样的 hex 值,只是更长了。

4

1 回答 1

-1

console.log 的输出有单引号。这意味着您尝试解析的字符串具有它们。在解析之前剥离它们。

例如,这是一个使用节点的会话:

> console.log("abc")
abc

您发布的代码段显示了单引号。节点没有把它们放在那里,所以它们一定是更早地获取了你的数据。确保在生成和存储字符串时抑制它们。

于 2012-07-09T00:47:28.850 回答