4

我有一个基本的前端(html、css、jquery),我想使用sails.io.js 与API 服务器进行通信(使用sails 开发,启用cors)。API 在 localhost:10000 上运行,但稍后它将在另一个域上,而不是 webclient 上的域。

直接从 jquery,我可以向这个 API 发出一些获取请求并获得预期的结果。

谈到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。

我试图使这个测试尽可能简单:

索引.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);
    });
};

我的sails (0.9.16) API 仅在 GET /data 路由上返回一个 json 对象。

我在 api 中实现了一个虚拟的 __getcookie 函数:

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

并在interpret.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 服务器提供),您需要告诉 Sails 套接字客户端要连接到哪个 URL:

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 前面使用 / ,例如:

    <script 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 回答