我有一个基本的前端(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.
答案 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)
你是否尝试过在src前面的/,如:
&LT; script src =&#34; js / sails.io.js&#34;&gt;
您在/ assets / js /文件夹(风帆0.10)或/ assets / linker / js文件夹(风帆0.9及以下)中有sails.io.js。
sails是否将js文件复制到.tmp / public / js文件夹?
您的index.html文件在哪里?