在socket.io MEAN应用程序上使用路径

时间:2016-04-12 22:37:14

标签: angularjs node.js sockets socket.io mean-stack

我正在使用MEAN应用并使用Socket.io。当我开发第一页(国际象棋游戏)时,它一直很好。

server.js

var express = require('express');
var app = express();
var server = app.listen(3000);
var io = require('socket.io').listen(server);
var session = require('express-session');

app.use(session({ secret: 'chocolatecakepancakesicecream'}));

var html_dir = './html/';

app.use(express.static('public'));

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

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

    // ...
}

// ...

chessapp.js

//Load angular
var app = angular.module('chess-game', ['btford.socket-io', 'ngMaterial', 'ngMessages', 'ngAnimate'])
.factory('mySocket', function (socketFactory) {
    var myIoSocket = io.connect('http://localhost:3000');

    mySocket = socketFactory({
    ioSocket: myIoSocket
    });

    var mySocket = socketFactory();
    mySocket.forward('select-match-type');
    mySocket.forward('game-event');


return mySocket;
    });

// ...

我想添加一个新页面来实时监控应用程序中的统计信息。我想使用不同的路径连接以保持逻辑分离。我已经尝试了http://socket.io/docs/Wikipedia找到的即可使用的内容,但它无效。

server.js(带路径)

var express = require('express');
var app = express();
var server = app.listen(3000);
var io = require('socket.io').listen(server);
var session = require('express-session');

app.use(session({ secret: 'chocolatecakepancakesicecream'}));

var html_dir = './html/';

app.use(express.static('public'));

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

var chess = io.of('/chess');
var stats = io.of('/stats');

chess.on('connection', function (socket) {

// ...

}

stats.on('connection', function (socket) {

// ...

}

// ...

chessapp.js(带路径)

//Load angular
var app = angular.module('chess-game', ['btford.socket-io', 'ngMaterial', 'ngMessages', 'ngAnimate'])
.factory('mySocket', function (socketFactory) {
    var myIoSocket = io.connect('http://localhost:3000', {path: '/chess'});

    mySocket = socketFactory({
    ioSocket: myIoSocket
    });

    var mySocket = socketFactory();
    mySocket.forward('select-match-type');
    mySocket.forward('game-event');
    return mySocket;
});

运行此代码时,我没有从节点收到任何错误,但是没有建立任何连接。我相信客户端部分正在工作,因为我可以在控制台中看到对localhost:3000 / chess的请求,但结果是找不到404。

如果有人能告诉我使用angular / node / socket.io设置路径的正确方法,或者告诉我哪里出错了,那将非常感谢!

1 个答案:

答案 0 :(得分:0)

基本上,我不认为.of函数也会为你创建路径。您的服务器只有' / chessgame'的路由。不是' / chess'。在您的server.js文件中,您必须添加一个' chess'路线:

app.get('/chess', function...

此外,如果您使用:

,它是否有效
io.on('connection'...

而不是chess.on?