使用sails.io.js从前端获取API请求

时间:2014-06-25 20:43:50

标签: websocket socket.io sails.js sails.io.js

我有一个基本的前端(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提供服务 我已经使用凉亭安装了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 /数据路径上的json对象。

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

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

并评论了explain.js中的第481行(Scott评论如下)。

我还修改了config / socket.js:

 authorization: false,

=&GT;我现在可以从我的API的/ data路径获得结果:)

但是......在每个请求中我都有以下错误:

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

2 个答案:

答案 0 :(得分: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);
    });
};

应该有效。您应该能够在控制台中看到是否通过查找&#34; io.socket成功连接来连接套接字。&#34;消息。

答案 1 :(得分:0)

  1. 你是否尝试过在src前面的/,如:

    &LT; script src =&#34; js / sails.io.js&#34;&gt;

  2. 您在/ assets / js /文件夹(风帆0.10)或/ assets / linker / js文件夹(风帆0.9及以下)中有sails.io.js。

  3. sails是否将js文件复制到.tmp / public / js文件夹?

  4. 您的index.html文件在哪里?