2017-01-26 3 views
0

Ich baue ein Echtzeit-Benachrichtigungssystem mit socket.io. Das ist mein serverseitigen Code zur Zeit:Auslösen von socket.io Echtzeit-Benachrichtigungen von Express 4 Middleware

bin/www:

var app = require('../app'); 
var server = http.createServer(app); 

var io = app.io 
io.attach(server); 

server.listen(port, function(err) { 
    if (err) console.log(err); 
    console.log('Listening on port ' + port + '...'); 
}); 

app.js:

var socket_io = require('socket.io'); 
var express = require('express'); 

var app = express(); 
var io = socket_io(); 
app.io = io; 
require('./config/socket')(app.io); 

config/socket.js:

var User = require('../controllers/user'); 

module.exports = function (io) { 
    io.on('connection', function (socket) { 
     console.log('Socket.io connected'); 
     socket.emit('connection', "Connection created."); 
     socket.on('send notification', function(data) { 
      User.createNotification(socket.request.user, data); 
     }); 
    }); 
}; 

routes/index.js:

var express = require('express'); 
var User = require('../controllers/user'); 
var router = express.Router(); 

router.post('/order', User.order); 
module.exports = router; 

controllers/user.js:

var User = require('../models/user').model; 
var io = require('socket.io'); 

module.exports = { 
    order: function(req, res) { 
     /* some create order code */ 
     io.emit('send notification', 'Your order was successful!'); 
     res.sendStatus(200); 
    } 
} 

Ich erhalte den Fehler TypeError: io.emit is not a function wenn ich versuche POST /send die Strecke zu nennen, obwohl ich deutlich die Einleitung meiner app.js bin socket.io in und bin/www Dateien und erfordert es in controllers/user.js. Alle Beispiele Ich habe online von in diesem Teil emittieren Benachrichtigungen gesehen:

io.on('connection', function (socket) { 
     socket.emit(event, msg); 
    }); 

aber ich mag, dass meine Benachrichtigungen von der Middleware ausgelöst werden, damit ich benutzerdefinierte Benachrichtigungen an den Benutzer senden kann, wenn bestimmte Ereignisse in der Anwendung backend passieren .

Antwort

0

folgend statt Versuchen:

io.on('connection', function(socket){ 
    socket.on('xxx', function(obj){ 
     io.emit('xxx', {xxx: xxx}) 
    }) 
}) 

dies Ihre TypeError: unterdrücken soll.

Verwandte Themen