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.js
とbin/www
ファイルでsocket.io
を開始していていてもルートPOST /send
を呼び出そうとするたびにエラーTypeError: io.emit is not a function
を取得しておきますcontrollers/user.js
に必要です。すべて私がオンラインに見てきた例は、この部分の中から通知を発する:
io.on('connection', function (socket) {
socket.emit(event, msg);
});
が、私は、特定のイベントがアプリケーションのバックエンドで発生したときに、私は、ユーザーにカスタム通知を送ることができますので、私の通知は、ミドルウェアからトリガされたいです。