2016-04-12 7 views
0

私はMEANアプリケーションとSocket.ioを使用しています。私が最初のページ(チェスゲーム)を開発していたので、うまくいきました。socket.ioのアプリケーションのパスを使用する

server.js

var express = require('express'); 
var app = express(); 
var server = app.listen(3000); 
var io = require('socket.io').listen(server); 
var session = require('express-session'); 

app.use(session({ secret: 'chocolatecakepancakesicecream'})); 

var html_dir = './html/'; 

app.use(express.static('public')); 

app.get('/chessgame', function(req, res) { 
    res.sendfile(html_dir + 'chessgame.html'); 
}); 

io.on('connection', function (socket) { 

    // ... 
} 

// ... 

chessapp.js

//Load angular 
var app = angular.module('chess-game', ['btford.socket-io', 'ngMaterial', 'ngMessages', 'ngAnimate']) 
.factory('mySocket', function (socketFactory) { 
    var myIoSocket = io.connect('http://localhost:3000'); 

    mySocket = socketFactory({ 
    ioSocket: myIoSocket 
    }); 

    var mySocket = socketFactory(); 
    mySocket.forward('select-match-type'); 
    mySocket.forward('game-event'); 


return mySocket; 
    }); 

// ... 

私はリアルタイムでアプリケーション内の統計情報を監視するために新しいページを追加したいです。私は論理を別に保つために別のパスを使って接続したいと思う。私はhttp://socket.io/docs/で見つかったものを試しましたが、これは.ofですが、うまく機能しません。私が実行したとき、私はノードからのエラーのいずれかの種類を得ることはありません(パス付き)

server.js(パス付き)

var express = require('express'); 
var app = express(); 
var server = app.listen(3000); 
var io = require('socket.io').listen(server); 
var session = require('express-session'); 

app.use(session({ secret: 'chocolatecakepancakesicecream'})); 

var html_dir = './html/'; 

app.use(express.static('public')); 

app.get('/chessgame', function(req, res) { 
    res.sendfile(html_dir + 'chessgame.html'); 
}); 

var chess = io.of('/chess'); 
var stats = io.of('/stats'); 

chess.on('connection', function (socket) { 

// ... 

} 

stats.on('connection', function (socket) { 

// ... 

} 

// ... 

chessapp.js

//Load angular 
var app = angular.module('chess-game', ['btford.socket-io', 'ngMaterial', 'ngMessages', 'ngAnimate']) 
.factory('mySocket', function (socketFactory) { 
    var myIoSocket = io.connect('http://localhost:3000', {path: '/chess'}); 

    mySocket = socketFactory({ 
    ioSocket: myIoSocket 
    }); 

    var mySocket = socketFactory(); 
    mySocket.forward('select-match-type'); 
    mySocket.forward('game-event'); 
    return mySocket; 
}); 

このコードは接続されていません。クライアント側の部分は動作していると思うが、私はコンソールでリクエストがlocalhost:3000/chessに送られているのを見ることができるが、その結果は404ではない。

誰かがangle/node/socket.ioでパスを設定する正しい方法を教えたり、どこに間違っているのかを教えてもらえれば、それは非常に感謝しています。

答えて

0

基本的には、.of関数があなたのルートを作成するとは思えません。サーバーには '/ chess'ではなく '/ chessgame'のルートしかありません。あなたは 'チェス' ルートを追加する必要がありますファイルをあなたのserver.jsで:

app.get('/chess', function... 

また、あなたが使用している場合、それは動作しません:

io.on('connection'... 

代わりのchess.on?

+0

はい。 io.onで正常に動作します。 app.all( '/ chess'、function ..)を追加することで、404エラーは発生しませんでしたが、今度は次のようになります: "要求されたリソースにAccess Control-Allow-Originヘッダーがありません。 http://127.0.0.1:3000 'はアクセスが許可されていません。 – Steve

+0

io.on(ログに接続が確立されていることを示しています)を使用しているときは「動作しています」 - クライアントがhttp://127.0.0.1:3000/socket.io/を要求しているのがわかりますhttp:// localhost:3000/chess – Steve

関連する問題