1

我正在使用 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 语句,因为我的键不匹配?

我需要改变什么才能使这项工作?

4

2 回答 2

2

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

socket.emit('key', { Key: 'Speed', value: joystick1.deltaY() });
于 2013-07-10T12:03:32.100 回答
2

data 参数是一个 javascriptObject或 javascript 哈希。此对象没有 aKey或 aValue属性。

要测试您的对象是否具有关键用途data.hasOwnproperty('Speed')。如果要获取此属性的值,请使用data['Speed']或等效的点表示法data.Speed

于 2013-07-10T12:03:50.763 回答