【问题标题】:Check function name exists and call by String检查函数名是否存在并通过字符串调用
【发布时间】:2019-12-12 19:19:24
【问题描述】:

我正在努力促进和组织我在套接字通信和 Node.JS 之间的工作(我的项目太大)

我使用我创建的函数代替客户端中的 socket.emit() 函数:

function socketEmit(socketName, functionName, data){
    socket.emit(socketName, {functionName: functionName, data: data});
}
socketEmit('exampleClass', 'exampleFunction', 'test');
socketEmit('exampleClass2', 'exampleFunction2', 'test');

发出后,我使用此函数在服务器端获取套接字(socket.on)。并根据“socketName”在类中注册

socket.on('exampleClass', function (socketData){
        var exampleClass = require('./server/exampleClass.js');
        exampleClass.registerSocket(socket, socketData);
})
socket.on('exampleClass2', function (socketData){
        var exampleClass2 = require('./server/exampleClass2.js');
        exampleClass2.registerSocket(socket, socketData);
})

在类中有这个函数“registerSocket”来执行相同的操作

exampleClass.js

module.exports = {
    registerSocket: function(socket, socketData){
        var functionName = socketData.functionName;
        var data = socketData.data;
        [functionName](socket, data);
    },
}

function exampleFunction(socket, data){
  console.log('test');
}

但是,我在 registerSocket 函数的这部分有一个错误:

[functionName] is not a function

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    你正在尝试调用一个数组[functionName](socket, data);

    const array = [functionName]; // array
    array(socket, data); // you can't :)
    

    将函数放入对象中,并使用[] 表示法访问它。

    const fns = {
      exampleFunction(socket, data){
         console.log('test');
      }
    };
    
    module.exports = {
        registerSocket: function(socket, socketData){
            var functionName = socketData.functionName;
            var data = socketData.data;
            fns[functionName](socket, data);
        },
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多