【问题标题】:socket.io can't get it to worksocket.io 无法让它工作
【发布时间】:2013-10-11 16:39:21
【问题描述】:

编辑 1:

好的,服务器问题解决了。这是集成到我的项目中的完整服务器代码。

var http =              require('http');
var express =           require('express');
var requestHandler =    require(__dirname + '/app_modules/request-handler.js');
var app =               express();

app.configure(function(){
    app.use(express.static(__dirname + '/html'));
    app.use(express.bodyParser());
});

var httpServer = http.createServer(app);
httpServer.listen(80);

var io = require('socket.io').listen(httpServer);

io.on('connection', function(socket){
    socket.on('event', function(data){

    });
    socket.on('disconnect', function(){

    });
});

下一个问题是在我的静态 html 页面中包含源 .js。这会引发错误:

<script src="/socket.io/socket.io"></script>

Resource interpreted as Script but transferred with MIME type text/plain: "http://localhost/socket.io/socket.io". localhost/:206
Uncaught SyntaxError: Unexpected identifier socket.io:1
Uncaught ReferenceError: io is not defined 

原始问题:

我正试图让这个傻瓜在测试服务器上工作。这是 1:1,直接来自 github 上的 socket.io 文档。

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

io.on('connection', function(socket){
    socket.on('event', function(data){

    });
    socket.on('disconnect', function(){

    });
});

server.listen(3000);

这是我得到的:

[INFO] 19:37:40 Restarting
[ERROR] 19:37:40 TypeError
TypeError: object is not a function
    at Object.<anonymous> (/Users/me/work/github/node-forever-gui/server/socket_test.js:3:30)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Object..js (/usr/local/lib/node_modules/node-dev/lib/hook.js:52:17)
    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> (/usr/local/lib/node_modules/node-dev/lib/wrap.js:47:1)
    at Module._compile (module.js:456:26)

所有模块都通过 npm 安装。请帮我解决这个问题!

【问题讨论】:

  • 第 3 行第 30 列是什么?那是你的full socket_test.js 文件(顶部代码块)
  • socket_test.js 是我发布的第一个代码。
  • socket.io 在他们的示例中,如果您可以将节点 http server 与套接字 io 结合使用,它们会显示 require('socket.io').listen(80) idk。先试试 80。

标签: javascript node.js socket.io


【解决方案1】:

这正是所说的,io 不是函数,您不能将 HTTP 对象传递给它。请改用 listen 方法将 Socket.IO 附加到 HTTP 实例。

var io = require('socket.io').listen(server);

对于您的第二个错误,该文件是一个脚本,并且具有扩展名。将.js 添加到引用中。

<script src="/socket.io/socket.io.js"></script>

【讨论】:

    【解决方案2】:

    有些人遇到这个问题是因为 es6 env 中的导入写错了

    我的代码有问题时

    import { socketIo } from 'socket.io';
    
    // start server on port
    const server = app.server.listen(process.env.PORT || config.port, () => {
        console.log(` ====== Listening on ${app.server.address().port} ====== `.bgWhite.black.bold);
    });
    
    // socketIo.io
    const io = socketIo(server);
    io.on('connection', (socket) => {
        console.log(` ====== Socket Connected => `.bgWhite.black.bold, socket.id);
    });
    

    UnhandledPromiseRejectionWarning: TypeError: socket_io_1.socketIo 不是函数

    修复很简单

    import * as socketIo from 'socket.io';

    这是一个例子https://github.com/luixaviles/socket-io-typescript-chat/blob/master/server/src/chat-server.ts

    【讨论】:

    • 我不能说为什么,但是经过 3 天的密集搜索,只有你的解决方案对我有用。
    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2016-02-24
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多