2016-07-31 10 views
0

Ich habe ein Express-Modul in einer Datei, Benutzernamen und in einer anderen Datei, socket.io-Modul, um Chat zu registrieren. Was könnte der beste Weg sein, den Benutzernamen an das Socket-Modul zu senden?zwischen Modulen kommunizieren nodjs

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"); 
     }); 
    }); 
} 

Antwort

1

einen Weg gefunden, Daten zu übergeben, indem das Modul singleton, das ist vielleicht nicht die beste Lösung, aber ich könnte erreichen, was ich wollte

./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); 
}); 

Hope this wie mich benötigt diejenigen hilft, bitte bessere Möglichkeiten vorschlagen, dank

Verwandte Themen