为什么我无法访问通过 node.js 中的密钥 socket.io 发送的数据

Why can’t I access data sent via socket.io by key in node.js?

本文关键字:socket 密钥 io 数据 js 访问 node 为什么      更新时间:2023-09-26

我使用 socket.io 从我的网页发送一些数据,然后在节点.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
    });

我在节点中处理它.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 语句,因为我的键不匹配?

我需要更改什么才能完成这项工作?

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

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

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

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