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
的第二次调用给你正确的值(但不是第一或第三)。