最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Node.js错误?存储为变量时函数的返回值更改

IT培训 admin 5浏览 0评论

Node.js错误?存储为变量时函数的返回值更改

好吧,我不会说太多...我一直在使用node.js作为WebSocket服务器,我有这个问题吗? :enter image description here

(预期输出是:'在这里工作')

以下是执行此操作的行:enter image description here

更多图片:enter image description here(预期输出为:'作品')

我的意思是,当值存储为变量时,它会发生变化吗?这是nodeJS或v8引擎中的某种错误吗? (可能,这是99%我错了;)

这是函数的来源:

websocket.prototype.decodeWebSocketMessage = function decodeWebSocketMessage(native_data){
var message = native_data;//data.slice(start, end);
var FIN = (message[0] & 0x80);
var RSV1 = (message[0] & 0x40);
var RSV2 = (message[0] & 0x20);
var RSV3 = (message[0] & 0x10);
var Opcode = message[0] & 0x0F;
var mask = (message[1] & 0x80);
var length = (message[1] & 0x7F);
var nextByte = 2;
if (length === 126) {// length = next 2 bytes
    nextByte += 2;
} else if (length === 127){// length = next 8 bytes
    nextByte += 8;
}

var maskingKey = null;
if (mask){
    maskingKey = message.slice(nextByte, nextByte + 4);
    nextByte += 4;
}

var payload = message.slice(nextByte, nextByte + length);

if (maskingKey){
    for (var i = 0; i < payload.length; i++){
        payload[i] = payload[i] ^ maskingKey[i % 4];
    }
}
return payload.toString().split("\n")[0];

}

回答如下:

你的函数decodeWebStream会改变输入变量d。这可能与你的代码中的其他地方的错误相结合,双重编码你的数据可能导致decodeWebStream的第二次调用给你正确的值(但不是第一或第三)。

Node.js错误?存储为变量时函数的返回值更改

好吧,我不会说太多...我一直在使用node.js作为WebSocket服务器,我有这个问题吗? :enter image description here

(预期输出是:'在这里工作')

以下是执行此操作的行:enter image description here

更多图片:enter image description here(预期输出为:'作品')

我的意思是,当值存储为变量时,它会发生变化吗?这是nodeJS或v8引擎中的某种错误吗? (可能,这是99%我错了;)

这是函数的来源:

websocket.prototype.decodeWebSocketMessage = function decodeWebSocketMessage(native_data){
var message = native_data;//data.slice(start, end);
var FIN = (message[0] & 0x80);
var RSV1 = (message[0] & 0x40);
var RSV2 = (message[0] & 0x20);
var RSV3 = (message[0] & 0x10);
var Opcode = message[0] & 0x0F;
var mask = (message[1] & 0x80);
var length = (message[1] & 0x7F);
var nextByte = 2;
if (length === 126) {// length = next 2 bytes
    nextByte += 2;
} else if (length === 127){// length = next 8 bytes
    nextByte += 8;
}

var maskingKey = null;
if (mask){
    maskingKey = message.slice(nextByte, nextByte + 4);
    nextByte += 4;
}

var payload = message.slice(nextByte, nextByte + length);

if (maskingKey){
    for (var i = 0; i < payload.length; i++){
        payload[i] = payload[i] ^ maskingKey[i % 4];
    }
}
return payload.toString().split("\n")[0];

}

回答如下:

你的函数decodeWebStream会改变输入变量d。这可能与你的代码中的其他地方的错误相结合,双重编码你的数据可能导致decodeWebStream的第二次调用给你正确的值(但不是第一或第三)。

发布评论

评论列表 (0)

  1. 暂无评论