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

何か助けていただければ幸いです。必要に応じてさらに情報を追加します。注:認証コードは明らかに変更されていますが、その下のuidのような16進値であり、さらに長くなっています。

4

1 に答える 1

-1

console.log の出力には一重引用符が含まれています。これは、解析しようとしている文字列にそれらがあることを意味します。解析する前にそれらを取り除きます。

たとえば、ノードを使用したセッションは次のとおりです。

> console.log("abc")
abc

投稿したスニペットには、一重引用符が表示されていました。node はそれらをそこに配置しなかったため、何らかの方法で以前にデータを取得したに違いありません。文字列を生成して保存するときは、それらを必ず抑制してください。

于 2012-07-09T00:47:28.850 に答える