繁体   English   中英

socket.io express 和 angularJS 错误

[英]socket.io express and angularJS errors

我正在尝试使用 ExpressJS 和 AngularJS 在我的网站上安装Socket.io

节点

服务器.js

var express        = require('express');
var app            = express();

fs = require('fs');

// set our port
var port = 3000; 

// set the static files location /public/img will be /img for users
app.use(express.static(__dirname + '/public'));

require('./config');

// routes ==================================================
require('./app/routes')(app); // configure our routes

// start app ===============================================
// startup our app at http://localhost:3000
app.listen(port);               


// shoutout to the user                     
console.log('Magic happens on port ' + port);

// expose app           
exports = module.exports = app;

路由.js

module.exports = function(app) {
    var http = require('http').createServer(app);
    var io = require('socket.io').listen(http);

    io.sockets.on('connection', function(client) {
        console.log('a user connected');

        socket.emit('connection', "Connection created.")
    });
};

AngularJS

套接字.js

angular.module('InterfaceApp.services').factory('socket', [function() {
    var socket = io.connect("http://localhost:3000");

    return {
        on: function(eventName, callback) {
            socket.on(eventName, callback);
        },
        emit: function(eventName, data) {
            socket.emit(eventName, data);
        }
    };
}]);

启动我的服务器时,控制台只显示

魔法发生在 3000 端口

在我的浏览器控制台中,它每秒(或更少)轮询一次错误

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

我错过了什么? 为 socket.io 使用工厂是一种糟糕的方式吗?

我认为它不起作用,因为您没有在 routes.js 文件中正确实现套接字 IO

根据 socket.io 的官方网站,你应该尝试这样的事情。

var app = require('express').createServer();
var io = require('socket.io')(app);

app.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

http://socket.io/docs/

您在服务器代码中在哪里使用了 socket.io?

检查波纹管代码

var express        = require('express');
var app            = express();
var socketio = require('socket.io');
var fs = require('fs');
var http = require('http');

// set our port
var port = 3000;

// set the static files location /public/img will be /img for users
app.use(express.static(__dirname + '/public'));

require('./config');
var server = http.createServer(app);
// routes ==================================================
require('./app/routes')(app); // configure our routes
var io = socketio.listen(server);
// start app ===============================================
// startup our app at http://localhost:3000
app.listen(port);

 io.sockets.on('connection', function (socket) {
  // handle connections here 
 });
// shoutout to the user                     
console.log('Magic happens on port ' + port);

// expose app           
exports = module.exports = app;

终于找到解决办法

服务器.js

var express = require('express');
var app = express();
var http = require('http').createServer(app);
var io = require('socket.io').listen(http);
fs = require('fs');

// set our port
var port = 3000;

app.set('port', 3000)
app.use(express.static(__dirname + '/public'));

require('./config');

// routes ==================================================
require('./app/routes')(app, io); // configure our routes

// startup our app at http://localhost:3000
http.listen(app.get('port'), function(){
    console.log('Magic happens on port ' + app.get('port'));
});


// expose app           
exports = module.exports = app;

路由.js

module.exports = function(app, io) {
    io.on('connection', function(x){
        console.log("YEAH");
    })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM