带有socket.io的Mean.io框架

时间:2014-07-02 08:29:35

标签: angularjs express socket.io npm mean.io

如何在Mean.io堆栈中使用socket.io?

首先,Mean.io会定期更改其文件夹结构。所以我的问题是哪里是配置socket.io的最佳位置?或者使用express.io更好吗?

第二我仍然不太确定在哪里寻找能告诉mean.io监听端口的代码,我发现在all.js文件的config文件夹中定义了一个端口,但真正的问题是我定义了server.listen(port)应用程序没有加载。如果我没有应用程序加载但socket.io不起作用。

另外我还有关于/socket.io/socket-io.js文件的问题吗?我已将其复制到索引文件夹中,但我的应用无法找到它或说404错误。据我所知,我知道这不是一个真实的文件就坐在任何这样的位置上,人们也建议将该行放在127.0.0.1/socket.io/socket-io.js但是没有制作js文件可供应用程序运行socket.io。

在mean.io框架中定义socket.io的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

我也面临同样的问题,花了我一个星期的时间才最终做对了。我会尝试解释我的所作所为:

<强> app.js

在这个文件中,我只是调用为我创建和设置socket.io对象的代码,然后将其传递给routes模块。

'use strict';

/*
 * Defining the Package
 */
var Module = require('meanio').Module;

var MeanSocket = new Module('chat');

/*
 * All MEAN packages require registration
 * Dependency injection is used to define required modules
 */
MeanSocket.register(function(app, http) {

    var io = require('./server/config/socketio')(http);

    //We enable routing. By default the Package Object is passed to the routes
    MeanSocket.routes(io);

    return MeanSocket;
});

服务器/配置/ socketio.js

此文件只是配置socket.io对象。请注意,由于 http 对象(快速服务器)在旧的meanio版本中不可用,我必须将meanio模块升级到版本0.5.26。此外,如果您想使用ssl,可以注入 https 而不是 http

'use strict';

var config = require('meanio').loadConfig(),
    cookie = require('cookie'),
    cookieParser = require('cookie-parser'),
    socketio = require('socket.io');

module.exports = function(http) {

    var io = socketio.listen(http);

    io.use(function(socket, next) {
        var data = socket.request;

        if (!data.headers.cookie) {
            return next(new Error('No cookie transmitted.'));
        }

        var parsedCookie = cookie.parse(data.headers.cookie);
        var sessionID = parsedCookie[config.sessionName];
        var parsedSessionID = cookieParser.signedCookie(parsedCookie[config.sessionName], config.sessionSecret);

        if (sessionID === parsedSessionID) {
            return next(new Error('Cookie is invalid.'));
        }

        next();
    });

    return io;
};

<强>路由/ chat.js

最后,使用routes文件来定义套接字事件等。

'use strict';

// The Package is passed automatically as first parameter
module.exports = function(MeanSocket, io) {

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

        console.log('Client Connected');

        socket.on('authenticate', function(data, callback) {

        });
    });
};

希望这有帮助!

答案 1 :(得分:1)

最简单的方法是安装套接字包......

mean install socket