代码之家  ›  专栏  ›  技术社区  ›  Hamza Haddad

调用服务器时找不到socket.io

  •  1
  • Hamza Haddad  · 技术社区  · 6 年前

    我正在尝试连接angular和nodejs服务器上的socket.io 在角度上,我已经声明了一个新的插座并连接它

    import * as io from 'socket.io-client';
    ...
    @component
    ...
    const socket = io.connect('http://localhost:3000');
    

    后端:server.js

    const express = require('express');
    const app = express();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    io.set('origins', 'http://localhost:4200');
    
    var routes = require('./routes/routes')(io);
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(function (req, res, next) {
        res.header("Access-Control-Allow-Origin", "http://localhost:4200");
        res.header("Access-Control-Allow-Methods", "GET, POST, PUT ,DELETE");
        res.header('Access-Control-Allow-Credentials', true);
    
        res.header(
            "Access-Control-Allow-Headers",
            "Origin, X-Requested-With, Content-Type, Accept"
        );
        next();
    });
    io.on('connection', function (socket) {
        socket.emit('news', { hello: 'world' });
        console.log("connectd");
    });
    app.use('/', routes);
    var server = app.listen(3000, function (io) {
    })
    

    应用程序正在编译并从服务器获取数据。但只有socket.io不工作 我得到这个错误:

    得到 http://localhost:3000/socket.io/?EIO=3&transport=polling&t=MEpN9Qy 404(未找到)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Marcos Casagrande    6 年前

    socket.io 附加到 http :

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

    所以你必须使用:

    http.listen(3000) 
    

    而不是

    app.listen(3000) // This will only start an express server
    

    你的socket服务器从不启动,这就是为什么你会得到404,因为 express 正在运行。