onT*_*net 6 javascript websocket npm
我按照这个 websockets 教程来学习如何将 Socket.IO 集成到 Angular 项目中。我已完全按照这些步骤操作,但是当我尝试运行 websockets 服务器项目时,出现以下错误:
类型错误:server.listeners 不是 Server.attach 中的函数 (\ws-server\node_modules\engine.io\lib\server.js:455:26)
在 server.js 的第 455 行,我们看到了这段代码
// cache and clean up listeners
var listeners = server.listeners('request').slice(0);
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么我会看到这个。我已经更新了express和Socket.IO,但仍然遇到同样的问题。如果需要,我可以提供角度代码,但我认为它不相关。
这是我的服务器代码的样子
let app = require('express')();
let http = require('http').Server(app);
let io = require('socket.io')('http');
io.on('connection', (socket) =>{
//Log when a user connects
console.log('user connected');
//Log when a client disconnects
socket.on('disconnect', function(){
console.log('user disconnected');
});
//When we receive a message event from our client, print out the
//contents of that message and echo it back to our clients using emit()
socket.on('message', (message)=>{
console.log('message received: ' + message);
io.emit('message', {type:'new-message', text: message});
});
});
//initialize server on port 5000
http.listen(5000, () =>{
console.log('started on port 500');
});
Run Code Online (Sandbox Code Playgroud)
这是完整的错误
TypeError: server.listeners 不是 Server.attach (C:\Users***\Documents\poker game\ws-server\node_modules\engine.io\lib\server.js:455:26) 处的函数。在 Server.initEngine (C:\Users***\) 附加 (C:\Users***\Documents\poker game\ws-server\node_modules\engine.io\lib\engine.io.js:124:10) Documents\poker game\ws-server\node_modules\socket.io\lib\index.js:310:21) 位于 C:\Users***\Documents\poker game\ws-server\node_modules\socket.io\lib \index.js:295:10 在 Encoder.encode (C:\Users***\Documents\poker game\ws-server\node_modules\socket.io-parser\index.js:135:5) 在 Server.listen .Server.attach (C:\Users***\Documents\poker game\ws-server\node_modules\socket.io\lib\index.js:290:16) 在新服务器 (C:\Users***\服务器上的 Documents\poker game\ws-server\node_modules\socket.io\lib\index.js:59:17) (C:\Users***\Documents\poker game\ws-server\node_modules\socket.io \lib\index.js:44:41) 在对象处。(C:\Users***\Documents\poker game\ws-server\index.js:3:30) 在 Module._compile (module.js:652:30)
小智 7
您不小心传入了字符串文字('http')而不是(http)变量名称。
改变这个:
let http = require('http').Server(app);
let io = require('socket.io')('http');
Run Code Online (Sandbox Code Playgroud)
对此:
let http = require('http').Server(app);
let io = require('socket.io')(http);
Run Code Online (Sandbox Code Playgroud)
今天我自己也犯了同样的错误。:)
将您的服务器更改为此,我还没有测试它,但它应该可以工作
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});
http.listen(5000, function(){
console.log('listening on *:5000');
});
Run Code Online (Sandbox Code Playgroud)
我不熟悉 Angular,但是,这就是您的代码在使用 JQuery 的前端中的样子
<script>
$(function () {
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9931 次 |
| 最近记录: |