Node.js socket.io:TypeError Object(){[native code]}没有方法'assign'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js socket.io:TypeError Object(){[native code]}没有方法'assign'相关的知识,希望对你有一定的参考价值。
我有2台服务器具有完全相同的设置。但是在1台服务器上,我遇到了错误而在另一台服务器上运行良好。
在服务器1上:
[root@tst socketio]# npm list socket.io
/var/socketio
└── socket.io@2.0.4
Package nodejs-0.10.48-3.el6.x86_64 already installed and latest version
在服务器2上:
[root@1 socketio]# npm list socket.io
/var/socketio
└── socket.io@2.0.4
Package nodejs-0.10.48-3.el6.x86_64 already installed and latest version
服务器1上的脚本:
[root@tst socketio]# node /var/socketio/socketioclient.js 1768
Time: 5/3/2018 21:10:6
ID: 1768
Start connect
S-connection
k95RAgJVnhzv4ItHABvu
S-emit event
S-disconnect
服务器2上的脚本:
[root@1 socketio]# node /var/socketio/socketioclient.js 1768
Time: 5/3/2018 20:59:24
ID: 1768
/var/socketio/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:66
var headers = Object.assign({}, defaultHeaders);
^
TypeError: Object function Object() { [native code] } has no method 'assign'
at new XMLHttpRequest (/var/socketio/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:66:24)
at /var/socketio/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling.js:24:13
at Object.<anonymous> (/var/socketio/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling.js:26:3)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/var/socketio/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling-xhr.js:6:15)
我的socketioclient.js:
console.log(datetime);
console.log('ID: '+ID);
var io = require('socket.io-client');
console.log('Start connect');
var sSocket = io.connect('https://11.22.33.44:1234', {
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax : 5000,
reconnectionAttempts: 3
});
sSocket.on('connect', function (data) {
console.log('S-connection');
console.log(sSocket.id);
console.log('S-emit event');
sSocket.emit('event', { ID: ID });
sSocket.disconnect();
}
sSocket.on('serveroutput', function (data) {
console.log('S-serveroutput: '+data);
});
});
sSocket.on('disconnect', function (data) {
console.log('S-disconnect');
});
sSocket.on('reconnect', function() {
console.log('S-reconnecting');
});
sSocket.on('reconnect_failed', function (data) {
console.log('S-reconnect failed');
});
我认为socketio版本或nodejs版本没有区别。但结果却不同。怎么会 ?
我已经阅读(在这个网站上)有关需要节点版本> = 4.但是因为它适用于1台服务器,我不认为这是问题所在。
tl; dr升级到最新的Node LTS release(目前为8个)
看起来你有不同版本的xmlhttprequest-ssl
,即使父级socket.io
是2.0.4。 xmlhttprequest-ssl
版本1.5.4或更新包括使用Object.assign
。 1.5.2版本中的版本可能在Node 0.10中工作得更好。
如果查看堆栈跟踪中的路径,则错误中涉及除socket.io
之外的许多模块:
socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest-ssl
节点0.10上支持的npm
命令是非确定性的,这意味着您最终可以安装两个相同父模块的安装,但它们由不同的子依赖项组成。这在很大程度上取决于你运行npm install
时你得到的版本。
最新版本的npm
(5.x)和yarn
package manager现在支持完全描述应用程序依赖关系的锁文件,并且能够随着时间的推移创建一致的安装。
许多模块已经开始放弃对4.x之前的任何Node版本的支持,因此这种类型的错误对于Node 0.x用户来说将变得越来越普遍。
使用当前的Long Term Support release of Node。如果你需要packages for your RHEL platform,Nodesource provide rpms。
以上是关于Node.js socket.io:TypeError Object(){[native code]}没有方法'assign'的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 状态代码 200 但页面未加载 Node.js Socket.io -- 使用 Socket.io 的 Node.js 教程,Daniel Nill,fs.readFile(),socket
Node.js socket.io.js 未找到或 io 未定义