【问题标题】:communicate between modules nodjs模块节点js之间的通信
【发布时间】:2016-07-31 22:46:32
【问题描述】:

我在一个文件中有一个 express 模块来注册用户名,在另一个文件中有一个 socket.io 模块来创建聊天。将用户名发送到套接字模块的最佳方式可能是什么?

server.js

var express = require('express');
app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var morgan = require('morgan');
var wagner = require('wagner-core');
var bodyParser = require('body-parser');

var port = process.env.PORT || 8080;

var name = [];

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

app.use(bodyParser.urlencoded({'extended':'true'}));            // parse application/x-www-form-urlencoded
app.use(bodyParser.json());                                     // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json

var dependencies = require("./app/dependencies.js")(wagner);

require('./app/routes.js')(app,wagner);

require('./app/socketio.js')(io,wagner);

http.listen(port,function(){
    console.log('listening on *:'+port);
});

./app/routes.js

module.exports = function(app,wagner) {

    // api ------------------------------------------------------------------

    app.post('/api/user', function(req, res) {
        console.log(req.body);
        // name.push(req.body.name);
        res.json({ message: 'from post' });
        wagner.invoke(function (UserName){
            UserName = "mjt";
        });
    });
};

./app/socketio.js

module.exports = function (io,wagner) {

    io.on('connection', function(socket){
        var userName = wagner.invoke(function(UserName) {
            console.log(UserName); 
        });

        console.log('a user connected');
        io.emit('user connected', "connected");

        socket.on('chat message', function(msg) {
            console.log('message: ' + msg);
            io.emit('chat message', msg);
        });

        socket.on('disconnect',function () {
            console.log('user disconnect');
            io.emit('user disconnected', "disconnected");
        });
    });
}

【问题讨论】:

    标签: javascript node.js sockets


    【解决方案1】:

    找到了一种通过使模块单例传递数据的方法,这可能不是最好的解决方案,但我可以实现我想要的

    ./app/socketio.js

    var socketio = function () {}
    
    socketio.prototype.users = [];
    
    socketio.prototype.start = function(io){
                console.log("from start");
        var that = this.users;
        var people = {};
        io.on('connection', function(socket){
            console.log(that);
    
            console.log('a user connected');
            io.emit('user connected', "connected");
    
            socket.on('chat message', function(msg) {
                console.log('message: ' + msg);
                io.emit('chat message', msg);
            });
    
            socket.on('disconnect',function () {
                console.log('user disconnect');
                io.emit('user disconnected', "disconnected");
            });
        });
        }
    
    socketio.prototype.updateUser = function (user) {
        console.log(user);
    
        this.users.push(user);
            console.log(this.users);
    }
    module.exports = exports = new socketio();
    

    server.js

    var express = require('express');
    app = express();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    var morgan = require('morgan');
    var wagner = require('wagner-core');
    var bodyParser = require('body-parser');
    
    var port     = process.env.PORT || 8080;
    
    
    var name = [];
    
    var socketIo = require('./app/socketio.js');
    
    var startio = socketIo.start(io);
    socketIo.updateUser("hey");
    socketIo.updateUser("there");
    
    app.use(morgan('dev'));
    app.use(express.static('public'));
    
    app.use(bodyParser.urlencoded({'extended':'true'}));            // parse application/x-www-form-urlencoded
    app.use(bodyParser.json());                                     // parse application/json
    app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
    
    var dependencies = require("./app/dependencies.js")(wagner);
    
    require('./app/routes.js')(app,wagner,socketIo);
    
    http.listen(port,function(){
      console.log('listening on *:'+port);
    });  
    

    希望对像我这样需要的人有所帮助,请提出更好的方法,谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多