4

基本的なフロントエンド (html、css、jquery) があり、sails.io.js を使用して API サーバー (sails で開発され、cors が有効になっている) と通信したいと考えています。API は localhost:10000 で実行されていますが、後で webclient のドメインとは別のドメインで実行されます。

jquery から直接、この API に get リクエストを発行して、期待どおりの結果を得ることができます。

websocket に関しては、いくつかの問題があります... index.html に (テストするためだけに)、次のように記述します。

<script src="js/sails.io.js"></script>
<script type="text/javascript">
    io.sails.url('http://localhost:10000');
    io.socket.get('/data', function serverResponded (body, sailsResponseObject) {
      // body === sailsResponseObject.body
      console.log('Sails responded with: ', body);
      console.log('with headers: ', sailsResponseObject.headers);
      console.log('and with status code: ', sailsResponseObject.statusCode);
    });
 </script>

しかし、Chrome の開発者ツールは教えてくれます

ReferenceError: io is not defined 

何か案が ?

アップデート

Web サーバー (python -m SimpleHTTPServer) で index.html を提供しています
。bower を使用して Sails.io.js をインストールしました。

私はこのテストをできるだけ簡単にしようとしました:

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
  </head>
  <body>
    <script src="bower_components/sails.io.js/dist/sails.io.js"></script>
    <script src="index.js"></script>
  </body>
</html>

index.js:

window.onload=function(){
    io.sails.url = 'http://localhost:10000';
    io.socket.get('http://localhost:10000/data', function (body, response) {
      console.log('Sails responded with: ', body);
    });
};

私の帆 (0.9.16) API は、GET /data ルートで json オブジェクトのみを返します。

API にダミーの __getcookie 関数を実装しました。

'get /__getcookie': function(req, res, next){
    res.json({ok: 123});
}

そして、interpt.js の 481 行目にコメントを付けました (以下の Scott のコメント)。

config/socket.js も次のように変更しました。

 authorization: false,

=> API の /data ルートから結果を取得できるようになりました :)

しかし...各リクエストで、次のエラーがあります:

error: Error: No valid session available from this socket.
4

2 に答える 2

3

まず、sails.io.jsにはsocket.io.jsのコードが含まれているため、個別に含める必要はありません。次の行を削除する必要があります。

<script src="bower_components/socket.io/lib/socket.js"></script>

次に、 index.htmlを (Web サーバーから提供するのではなく) ディスクからロードするだけの場合は、接続先の URL を Sails ソケット クライアントに伝える必要があります。

io.sails.url = 'http://localhost:10000';

ソケット呼び出しを開始する前に、これをどこかに置いてください。ライブラリは、呼び出しを試みる前に接続されるまで待機するのに十分スマートです。したがって、全体として:

window.onload=function(){
    io.sails.url = 'http://localhost:10000';
    io.socket.get('http://localhost:10000/data', function (body, sailsResponseObject) {
        console.log('Sails responded with: ', body);
        console.log('with headers: ', sailsResponseObject.headers);
        console.log('and with status code: ', sailsResponseObject.statusCode);
    });
};

動作するはずです。io.socket「正常に接続されました」を探すことで、ソケットが接続されているかどうかをコンソールで確認できるはずです。メッセージ。

于 2014-06-26T21:24:23.227 に答える
0
  1. 次のように、src の前に / を付けてみましたか。

    < スクリプト src="js/sails.io.js">

  2. /assets/js/ フォルダー (sails 0.10) または /assets/linker/js フォルダー (sails 0.9 以下) に Sails.io.js がありますか。

  3. Sails Lift はその js ファイルを .tmp/public/js フォルダーにコピーしましたか?

  4. index.html ファイルはどこにありますか?

于 2014-06-26T03:15:40.263 に答える