obj.hasOwnProperty(key) fails in serialize.js at line #25
This is a simple socket.io application.
const serialize = require('node-serialize'),
io = require('socket.io')(3333);
var active_socket_list = { };
io.on('connection', function (socket) {
active_socket_list[socket.id] = socket;
console.log('========== Active Sockets ==========');
console.log(active_socket_list);
console.log('============== END =============');
var key;
for (key in active_socket_list) {
console.log(' Key --> ' + key + ' ==> ' + active_socket_list.hasOwnProperty(key));
}
console.log('========== Serializing ==========');
var active_socket_list_string = serialize.serialize(active_socket_list);
console.log('========> ' + typeof active_socket_list_string);
var new_list = serialize.unserialize(active_socket_list_string);
console.log('========> ' + typeof new_list);
var new_socket = new_list[socket.id];
new_socket.emit('response', 'Hello world');
socket.on('disconnect', function () {
delete active_socket_list[socket.id];
});
});
I want to serialize (and later de-serialize) the active_socket_list object, which contains few socket.io socket objects indexed by their socket.id's.
But when I run the code (and there are 2 active sockets open) it fails with an error log as follows:
========== Active Sockets ==========
{ vwGdhtZ2OCYU725_AAAA:
Socket {
nsp:
Namespace {
name: '/',
server: [Object],
sockets: [Object],
connected: [Object],
fns: [Object],
ids: 0,
rooms: [],
flags: {},
adapter: [Object],
_events: [Object],
_eventsCount: 1 },
server:
Server {
nsps: [Object],
_path: '/socket.io',
_serveClient: true,
parser: [Object],
encoder: Encoder {},
_adapter: [Function: Adapter],
_origins: '*:*',
sockets: [Object],
eio: [Object],
httpServer: [Object],
engine: [Object] },
adapter:
Adapter {
nsp: [Object],
rooms: [Object],
sids: [Object],
encoder: Encoder {} },
id: 'vwGdhtZ2OCYU725_AAAA',
client:
Client {
server: [Object],
conn: [Object],
encoder: Encoder {},
decoder: [Object],
id: 'vwGdhtZ2OCYU725_AAAA',
request: [Object],
onclose: [Function: bound ],
ondata: [Function: bound ],
onerror: [Function: bound ],
ondecoded: [Function: bound ],
sockets: [Object],
nsps: [Object],
connectBuffer: [] },
conn:
Socket {
id: 'vwGdhtZ2OCYU725_AAAA',
server: [Object],
upgrading: false,
upgraded: true,
readyState: 'open',
writeBuffer: [],
packetsFn: [],
sentCallbackFn: [],
cleanupFn: [Object],
request: [Object],
remoteAddress: '::ffff:192.168.2.139',
checkIntervalTimer: null,
upgradeTimeoutTimer: null,
pingTimeoutTimer: [Object],
transport: [Object],
_events: [Object],
_eventsCount: 3 },
rooms: { vwGdhtZ2OCYU725_AAAA: 'vwGdhtZ2OCYU725_AAAA' },
acks: {},
connected: true,
disconnected: false,
handshake:
{ headers: [Object],
time: 'Fri May 12 2017 01:00:44 GMT+0530 (IST)',
address: '::ffff:192.168.2.139',
xdomain: true,
secure: false,
issued: 1494531044410,
url: '/socket.io/?auth_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsYXN0IjoiRGFzIiwiaWQiOjEyMywiZmlyc3QiOiJEaWJ5ZW5kdSJ9.5Da6dnJzVzQtJOKGqWlGeAlsUt1_9-6OTWoFp_ynhRY&EIO=3&transport=polling&t=LltplON',
query: [Object] },
fns: [],
flags: {},
_rooms: [],
_events: { disconnect: [Function] },
_eventsCount: 1 },
'DABYtF-AtqbxtuB5AAAB':
Socket {
nsp:
Namespace {
name: '/',
server: [Object],
sockets: [Object],
connected: [Object],
fns: [Object],
ids: 0,
rooms: [],
flags: {},
adapter: [Object],
_events: [Object],
_eventsCount: 1 },
server:
Server {
nsps: [Object],
_path: '/socket.io',
_serveClient: true,
parser: [Object],
encoder: Encoder {},
_adapter: [Function: Adapter],
_origins: '*:*',
sockets: [Object],
eio: [Object],
httpServer: [Object],
engine: [Object] },
adapter:
Adapter {
nsp: [Object],
rooms: [Object],
sids: [Object],
encoder: Encoder {} },
id: 'DABYtF-AtqbxtuB5AAAB',
client:
Client {
server: [Object],
conn: [Object],
encoder: Encoder {},
decoder: [Object],
id: 'DABYtF-AtqbxtuB5AAAB',
request: [Object],
onclose: [Function: bound ],
ondata: [Function: bound ],
onerror: [Function: bound ],
ondecoded: [Function: bound ],
sockets: [Object],
nsps: [Object],
connectBuffer: [] },
conn:
Socket {
id: 'DABYtF-AtqbxtuB5AAAB',
server: [Object],
upgrading: false,
upgraded: false,
readyState: 'open',
writeBuffer: [],
packetsFn: [],
sentCallbackFn: [],
cleanupFn: [Object],
request: [Object],
remoteAddress: '::ffff:192.168.2.139',
checkIntervalTimer: null,
upgradeTimeoutTimer: null,
pingTimeoutTimer: [Object],
transport: [Object],
_events: [Object],
_eventsCount: 3 },
rooms: { 'DABYtF-AtqbxtuB5AAAB': 'DABYtF-AtqbxtuB5AAAB' },
acks: {},
connected: true,
disconnected: false,
handshake:
{ headers: [Object],
time: 'Fri May 12 2017 01:00:46 GMT+0530 (IST)',
address: '::ffff:192.168.2.139',
xdomain: true,
secure: false,
issued: 1494531046069,
url: '/socket.io/?auth_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsYXN0IjoiRGFzIiwiaWQiOjEyMywiZmlyc3QiOiJEaWJ5ZW5kdSJ9.5Da6dnJzVzQtJOKGqWlGeAlsUt1_9-6OTWoFp_ynhRY&EIO=3&transport=polling&t=Lltploh',
query: [Object] },
fns: [],
flags: {},
_rooms: [],
_events: { disconnect: [Function] },
_eventsCount: 1 } }
============== END =============
Key --> vwGdhtZ2OCYU725_AAAA ==> true
Key --> DABYtF-AtqbxtuB5AAAB ==> true
========== Serializing ==========
/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:25
if(obj.hasOwnProperty(key)) {
^
TypeError: obj.hasOwnProperty is not a function
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:25:12)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
at Object.exports.serialize (/home/abc/Desktop/node_modules/node-serialize/lib/serialize.js:38:36)
I'm using NodeJs version v7.9.0 and [email protected]
I'm a Javascript newbie so forgive the horrible code...
I ran my object through a function to convert it to an Object...and that error went away... (the "seen" is to handle circualr references)
function traverse(thing, _seen) { let seen = _seen || [] if (typeof(thing) === "object" && thing !== null && seen.indexOf(thing) === -1) { seen.push(thing) if (typeof(thing.hasOwnProperty) === 'undefined') { Object.setPrototypeOf(thing, Object) } for (var _thing in thing) { traverse(thing[_thing], seen) } } return thing }
Same issue
Unhandled Rejection: TypeError: obj.hasOwnProperty is not a function
@dibyendu did you ever get something working?
I'm having same Issue While Sending binary data over a socket Connection.
E:\ProjectName\node_modules\socket.io-parser\dist\binary.js:39
if (data.hasOwnProperty(key)) {
^
TypeError: data.hasOwnProperty is not a function
at _deconstructPacket (E:\ProjectName\node_modules\socket.io-parser\dist\binary.js:39:22)
i had the same error, and changed line 25 of lib/serialize.js from: if(obj.hasOwnProperty(key)) { to: if((obj instanceof Object) ?obj.hasOwnProperty(key):{}) {
and it seems to have allowed my objects to serialize now.