为什么我不能通过node.js中的键访问通过socket.io发送的数据?

时间:2013-07-10 11:53:10

标签: javascript json node.js socket.io

我正在使用socket.io从我的网页发送一些数据,然后在node.js后端处理它。

我用来发送数据的代码是:

var joystick1 = new VirtualJoystick({
        container   : document.body,
        strokeStyle : 'cyan'
    });
    setInterval(function(){
                var outputEl    = document.getElementById('resulty');
                outputEl.innerHTML  = joystick1.deltaY();

                //THE DATA IS SENT HERE
                socket.emit('key', {Speed: joystick1.deltaY()});

            }, 1/30 * 1000);
    joystick1.addEventListener('touchStartValidation', function(event){
        var touch   = event.changedTouches[0];
        if( touch.pageX >= window.innerWidth/2 )    return false;
        return true
    });

我使用以下代码在node.js中处理它:

socket.on('key', KeyReceived);  //Key received from client

function KeyReceived(data)
{
    //DATA IS PRINTED HERE
    console.log(data);

    switch(data.Key)
    {
    case "Steering":
        _direction = 90 + data.value;
    console.log(_direction);
        break;
    case "Speed":
        _speed = 90 + data.value;
    console.log(_speed);
        break;
    case "Adjustment":
        _adjustment = data.value;
        break;
    }
}

在控制台中打印出我的数据,但出于某种原因它不会进入我的case语句,因为我的键不匹配?

我需要做些什么来改变这项工作?

2 个答案:

答案 0 :(得分:2)

记录您要发送的对象以查看其内容,但它没有Key 所以你真正想做的就是发送这个对象:

socket.emit('key', { Key: 'Speed', value: joystick1.deltaY() });

答案 1 :(得分:2)

data参数是javascript Object或javascript哈希。此对象没有KeyValue属性。

要测试您的对象是否具有密钥,请使用data.hasOwnproperty('Speed')。如果您想获取此属性的值,请使用data['Speed']或等效的点符号data.Speed