2017-01-26 7 views
0

socket.ioを使用してリアルタイム通知システムを構築しています。これは、現時点では私のサーバーサイドコードです:Express 4ミドルウェアからのsocket.ioリアルタイム通知のトリガー

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

私ははっきりと私のapp.jsbin/wwwファイルでsocket.ioを開始していていてもルートPOST /sendを呼び出そうとするたびにエラーTypeError: io.emit is not a functionを取得しておきますcontrollers/user.jsに必要です。すべて私がオンラインに見てきた例は、この部分の中から通知を発する:

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

が、私は、特定のイベントがアプリケーションのバックエンドで発生したときに、私は、ユーザーにカスタム通知を送ることができますので、私の通知は、ミドルウェアからトリガされたいです。

答えて

0

は、代わりに次のことを試してみてください。

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

これはあなたのTypeError:を抑制すべきです。

関連する問題