Почему сервер не получает ответ клиента на socket.io/node.js? [Дубликат]

  если s в 'ab': return 1 elif s in 'cd': return 2 else: return 3  
3
задан Ari 14 February 2013 в 01:30
поделиться

2 ответа

JSON не поддерживает включение определений / выражений function.

Вместо этого вы можете определить объект commands с помощью function, который вам нужен, и просто передать commandName:

// client-side

var commands = {
    log: function (param) {
        console.log(param);
    }
};

socket.on('executecommand', function(data){
    var a = 'foo';
    commands[data.commandName](a);
});
// server-side

socket.emit('executecommand', { commandName: 'log' });

Вы также можете использовать fn.apply() для передачи аргументов и проверить, что commandName соответствует команде с in :

// client-side
var commands = { /* ... */ };

socket.on('executecommand', function(data){
    if (data.commandName in commands) {
        commands[data.commandName].apply(null, data.arguments || []);
    } else {
        console.error('Unrecognized command', data.commandName);
    }
});
// server-side

socket.emit('executecommand', {
    commandName: 'log',
    arguments: [ 'foo' ]
});
7
ответ дан Jonathan Lonowski 16 August 2018 в 05:31
поделиться

Вы не можете отправлять литеральные функции JavaScript и ожидать, что он будет работать. Сначала вам нужно будет сначала скомпоновать функцию (например, поставить ее в пределах набора кавычек), а затем вычислить строку на стороне клиента.

2
ответ дан Daniel 16 August 2018 в 05:31
поделиться
  • 1
    Я думал, что считать eval чрезвычайно опасным? – Ari 14 February 2013 в 01:41
  • 2
    @ Ари в этом конкретном случае это очень много, но есть и другие случаи, когда eval вполне допустим. – Daniel 14 February 2013 в 02:35
Другие вопросы по тегам:

Похожие вопросы: