9

ここで説明されているように、オブジェクトをファイルに書き込む方法がわかります: How can I save objects to files in Node.js? しかし、オブジェクトを取得して、メソッドを含むオブジェクトをメモリにリロードできるように書き込む方法はありますか?

4

3 に答える 3

7

@AnthonySottile が前に言ったように、これは非常に危険な場合があり、適切なユースケースがあるかどうかはわかりませんが、キックと笑いのために、独自の再帰シリアライザーを作成する必要があります。このようなもの:

var toString = Object.prototype.toString;

function dump_object(obj) {
    var buff, prop;
    buff = [];
    for (prop in obj) {
        buff.push(dump_to_string(prop) + ': ' + dump_to_string(obj[prop]))
    }
    return '{' + buff.join(', ') + '}';
}

function dump_array(arr) {
    var buff, i, len;
    buff = [];
    for (i=0, len=arr.length; i<len; i++) {
        buff.push(dump_to_string(arr[i]));
    }
    return '[' + buff.join(', ') + ']';
}

function dump_to_string(obj) {
    if (toString.call(obj) == '[object Function]') {
        return obj.toString();
    } else if (toString.call(obj) == '[object Array]') {
        return dump_array(obj);
    } else if (toString.call(obj) == '[object String]') {
        return '"' + obj.replace('"', '\\"') + '"';
    } else if (obj === Object(obj)) {
        return dump_object(obj);
    }
    return obj.toString();
}

これでほとんどのタイプを処理できますが、常に変わり者が台無しにする可能性があるため、本番環境では使用しません。その後、シリアル化解除は次のように簡単です。

eval('var test = ' + dump_to_string(obj))
于 2012-06-30T17:42:44.897 に答える
0

私は最近 shoveJS: https://shovemedia.github.io/shovejs/を書き、まさにこの種のことを処理しました。YMMV -- Node ではまだ試していません。

型付きオブジェクト構造を JSON に変換し (ディスクに保存します)、その構造を適切なオブジェクト -> オブジェクト参照などを含む型付きオブジェクトに膨張させることができます。明確にするために、メソッド/クラス定義自体はシリアル化されません。システムは、シリアル化中に使用可能な登録済みのモデル/ファクトリ クラスが、逆シリアル化中にも使用可能であることを単純に想定しています。

簡単な例が掲載されていないことをあらかじめお詫び申し上げます。

編集:このテクニックは、Rob Wが以下のコメントで言及していることを強化したものです

于 2012-06-30T18:01:22.260 に答える