私は、データの変更時にビューを更新する必要のあるWebアプリケーションを構築しています。この目的のために私はsocket.ioを使用しています。これは、server.jsファイルに設定され:ソケットがルート内で発光しない
const io = require('socket.io')(http);
/* WEB SOCKET INITIALISATION
----------------------------------------- */
io.on('connection', function(socket) {
io.emit('new connection', 'new connection');
socket.on('disconnect', function() {
io.emit('offline', 'offline')
});
});
私のコンソールに見てみると、それはできるだけ早く私はページ上だと「新しい接続」のログ。今度は私が作ったルートの一つでソケットを使いたいと思っています。これを可能にするために、私は私がこのように、ルートを必要とする場所にio
をバインド:
const dashboardRouter = require('./routes/dashboard')(io);
これは、ルートの一部がどのように見えるかであるように:
/* MAKE SOCKET.IO ACCESSABLE
--------------------------------------------------------------- */
module.exports = function(io) {
/* INDEX ROUTE
-------------------------------------------------------------- */
router.get('/', account.checkSession, playwalls.statistics, playwalls.getYours, function(req, res, next) {
io.emit('update', 'testen');
res.locals.username = req.session.username;
res.render('dashboard/index');
});
/* EXPORT ROUTER
--------------------------------------------------------------- */
return router;
}
問題があるときにIアップデートを発行すると、コンソールにログインしません。私はconsole.log(io)
を経路の中に置くと、socket.ioが利用可能であるように見えます。私はターミナルコンソールの内部でエラーが発生しません。
これは次のようになり、クライアント側のJavaScriptファイルとは何ですか:
(function() {
const socket = io();
socket.on('update', function(data) {
console.log('Works');
});
socket.on('new connection', function(data) {
console.log(data);
});
}());
私はここで間違って何をしているのですか?ソケットがメッセージを発行する方法を確認するにはどうすればよいですか?誰かが私にこれを助けることを願っています!
ありがとうございます。
私はこの権利を得ているかどうかはわかりません。しかし、ページ/ルートがロードされている間は、WebSocketに接続していません。発行されても、 'io.emit'が呼び出された後にページが読み込まれるため、表示されません。あるいは、あなたは 'ダッシュボード'ルートへのAJAXコールをしていますか? –