私はこれを持っています:
io.sockets.on('connection', function(socket) {
socket.on("action1", function(data){
socket.emit("action1", data);
});
socket.on("action2", function(data){
socket.emit("action2", data);
});
socket.on("action3", function(data){
socket.emit("action3", data);
});
});
これ欲しい:
var socketMethods = {
action1:function(data, socket){
socket.emit("action1", data);
},
action2:function(data, socket){
socket.emit("action2", data);
},
action3:function(data, socket){
socket.emit("action3", data);
}
}
io.sockets.on('connection', function(socket) {
for(key in socketMethods){
socket.on(key, socketMethods[key]);
}
});
ただし、ソケットをメソッドに渡すことができず、最終的には
C:\__server\nodejs.js:217
socket.emit('action1', {msg:"No account"}
^
TypeError: Cannot call method 'emit' of undefined
関数を介してソケットを渡そうとしました:
io.sockets.on('connection', function(socket) {
for(key in socketMethods){
socket.on(key, function(data, socket){
socketMethods[key](data, socket);
});
}
});
ソケットは関数に渡されません。
メソッドを動的に呼び出しながら、メソッド内でソケットを使用するにはどうすればよいですか?
アップデート:
この正確なコードで:
io.sockets.on('connection', function(socket) {
for(key in socketMethods){
socket.on(key, function(data){
socketMethods[key](data, socket);
});
}
});
とても興味深いものを見つけました。
それは機能し、メソッドから socket.emits を実行できます!
ただし、現在は LAST メソッドを実行するだけです。この場合、何が要求されても action3 が呼び出されます。アクション 1 またはアクション 2 を要求した場合でも、アクション 3 が呼び出されます。
アップデート:
console.log(socket._events) を実行すると、関数 error:[関数]、action1:[関数]、action2:[関数]、action3:[関数] が添付されていることがわかります。これらの関数のそれぞれに何が入っているかを確認しようとすると、得られるのはそれだけです。
function ack() {
self.packet({
type: 'ack'
, args: io.util.toArray(arguments)
, ackId: packet.id
});
}
機能に関係なく、私は自分自身に送り返します。また、action2 をオブジェクトの最後に設定しました。action2 が呼び出されます。まだ。通常の方法で socket.on メソッドをアタッチすると、socket._events ではまったく同じように見えます。
すべてのメソッドが「最後の」アクション(action3)によって上書きされているという理論がありました。
眠れない