Nodejs socket.io搭建聊天室的时候报错?求大神帮助。

Nodejs socket.io搭建聊天室的时候报错?求大神帮助。

就是这篇文章(http://cnodejs.org/topic/531ed0f0fb2070fd4702d5ef)上的demo,我运行取来之后,输入用户名准备连接的时候出错,出错位置如下: /Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/transports/websocket.js:33 else transport = new protocolVersions[‘default’](mng, data, req); ^ TypeError: undefined is not a function at new WebSocket (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/transports/websocket.js:33:20) at Manager.handleClient (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/manager.js:662:19) at Manager.handleUpgrade (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/manager.js:618:8) at Server.<anonymous> (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/manager.js:123:10) at Server.EventEmitter.emit (events.js:106:17) at Socket.socket.ondata (http.js:1986:14) at TCP.onread (net.js:525:27)

运行环境: mac10.9 nodejs v0.10.22 Firefox 27.0.1

ps:本来开始是能够运行的,后来不知道怎么地就再也不能连接了。


2 回复

根据你描述的问题,错误信息表明 socket.io 在尝试创建 WebSocket 连接时遇到了类型错误。这通常是由于版本不兼容或依赖项问题导致的。以下是一些可能的解决方案和示例代码,希望能帮到你。

解决方案

  1. 更新 Node.js 和 npm: 确保你使用的是最新版本的 Node.js 和 npm,因为旧版本可能会与某些库不兼容。

    brew update
    brew upgrade node
    
  2. 检查依赖项版本: 确保 socket.io 及其相关依赖项的版本是最新的。可以在项目根目录下运行:

    npm install socket.io[@latest](/user/latest)
    
  3. 检查代码中的错误: 检查是否有拼写错误或语法错误,特别是字符串引号是否正确使用(例如,使用英文引号而非中文引号)。

示例代码

假设你已经有一个基本的聊天室应用结构,以下是简化后的 server.js 文件:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

io.on('connection', (socket) => {
    console.log('New client connected');
    socket.on('chat message', (msg) => {
        io.emit('chat message', msg);
    });
    socket.on('disconnect', () => {
        console.log('Client disconnected');
    });
});

server.listen(3000, () => {
    console.log('Server listening on port 3000');
});

客户端代码(例如 index.html):

<!DOCTYPE html>
<html>
<head>
    <title>Chat App</title>
</head>
<body>
    <ul id="messages"></ul>
    <input id="m" autocomplete="off" /><button onclick="sendMessage()">Send</button>

    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io();
        function sendMessage() {
            var message = document.getElementById('m').value;
            socket.emit('chat message', message);
            document.getElementById('m').value = '';
        }
        socket.on('chat message', function(msg) {
            var item = document.createElement('li');
            item.textContent = msg;
            document.getElementById('messages').appendChild(item);
        });
    </script>
</body>
</html>

运行应用

确保你的文件结构正确,并且 npm start 或直接运行 node server.js 能够启动服务器。

希望这些步骤能帮你解决问题!如果问题仍然存在,请提供更多的代码细节以便进一步诊断。


根据你的描述,错误发生在 WebSocket 的初始化过程中。错误提示 TypeError: undefined is not a function 表明在调用某个函数时,实际得到的是 undefined

以下是一些可能的原因及解决方法:

  1. 版本不兼容:你的 Node.js 和 socket.io 版本可能不兼容。确保使用较新版本的 socket.io 和 socket.io-client。

    可以尝试更新依赖:

    npm install socket.io[@latest](/user/latest) socket.io-client[@latest](/user/latest)
    
  2. WebSocket 库缺失或不兼容socket.io 使用 WebSocket 进行通信,可能需要安装 WebSocket 库。

    安装 WebSocket:

    npm install ws
    
  3. 代码中的语法问题:确认你的代码中没有语法错误,特别是字符串引号是否正确。在 JavaScript 中,推荐使用双引号 " 而不是单引号 ' 或 Unicode 引号。

以下是一个简单的示例,展示如何搭建一个基本的聊天室应用:

服务端代码 (server.js)

const io = require('socket.io')(3000);

io.on('connection', (socket) => {
    console.log('New client connected');
    
    socket.on('chat message', (msg) => {
        io.emit('chat message', msg);
    });

    socket.on('disconnect', () => {
        console.log('Client disconnected');
    });
});

客户端代码 (index.html)

<!DOCTYPE html>
<html>
<head>
    <title>Socket.IO chat</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { font: 13px Helvetica, Arial; }
        form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
        form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
        form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
        #messages { list-style-type: none; margin: 0; padding: 0; }
        #messages li { padding: 5px 10px; }
        #messages li:nth-child(odd) { background: #eee; }
    </style>
</head>
<body>
    <ul id="messages"></ul>
    <form action="">
        <input id="m" autocomplete="off" /><button>Send</button>
    </form>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
        $(function () {
            var socket = io();
            $('form').submit(function(e){
                e.preventDefault(); // prevents page reloading
                socket.emit('chat message', $('#m').val());
                $('#m').val('');
                return false;
            });
            socket.on('chat message', function(msg){
                $('#messages').append($('<li>').text(msg));
                window.scrollTo(0, document.body.scrollHeight);
            });
        });
    </script>
</body>
</html>

通过这些步骤,你应该可以解决你的问题。如果仍然有问题,请检查具体的错误信息并提供更多详细信息以便进一步诊断。

回到顶部