1

サーバーとの通信を確立する Web ページがありnode.jsます。オブジェクトを送信し、受信したのと同じオブジェクトを返すようにしています。ただし、返されるオブジェクトは異なります。そのメソッドはすべてなくなっています。

これが私がやっていることを示すコードです。オブジェクトを使用してイベントを送信します。

editor.getSession().on('change', function(event) {
    socket.emit('modificarCodigo', event);
});

そして、私はそれを次のように返します:

socket.on('modificarCodigo', function(data) {
    socket.broadcast.to(socket.grupo).emit('actualizarCodigo', data);
});

node.js送信したオブジェクトを変更するのではなく、そのまま返すにはどうすればよいですか? 現在表示されている動作は設計によるものだと思います。それが本当なら、どうすれば変更できますか?

4

3 に答える 3

3

関数を JSON にシリアル化することはできません。本当に関数を送信する必要がある場合は、関数に.toString()送信し、送信してから元に戻す必要がありevalますnew Functionが、それは危険な命題です...なぜメソッドを送信する必要があるのですか?

編集: OPは、彼がやろうとしていることはRange、ワイヤーを介してパスとエースエディターオブジェクトであるというコメントを追加しました...新しいRangeオブジェクトを構築するために必要なデータだけを送信する方がよいと思います。したがって、startRow、startCol、endRow、および endCol を送信するだけで、ワイヤの反対側で new Range(data.startRow、data.startCol、data.endRow、data.endCol) を実行できます。

補足として、 toJSONメソッドを使用して、オブジェクトの適切なシリアル化を処理できます (js エンジンが JSON.stringify/parse をサポートしている場合) 。次に例を示します。

function Dude(name, age) {
    this.name = name;
    this.age = age;
}
Dude.prototype = {
    speak: function() { alert('My name is ' + this.name); },
    toJSON: function() {
        return {
            type: 'Dude',
            props: { name: this.name, age: this.age }
        };
    }
};

http.get('http://getadude.com', function(json) {
    var data = JSON.parse(data);

    if(type === 'Dude') data = new Dude(data.props.name, data.props.age);
})
于 2012-05-04T15:16:45.230 に答える
1

ノードに dnode と呼ばれる素晴らしいライブラリがある、本当に必要な RPC のように聞こえます。 https://github.com/substack/dnode

于 2012-05-04T16:29:58.240 に答える
1

オブジェクトを送信する前に JSON としてシリアライズし、送信後にデコードします。それはうまくいくはずです。

于 2012-05-04T14:58:49.720 に答える