如何在不使用sails.io客户端帮助程序方法的情况下向sails.js控制器发出请求

时间:2014-03-06 15:27:23

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

我正在开发一个使用sails的应用程序,我必须从外部源连接。它们可以是IOS或Android移动应用程序,也可以只是外部html客户端。

在这方面,我不能使用sails辅助方法来使控制器操作处理Web套接字请求。

当我读完sails.io客户端文件时,我想我可以使用。

socket.emit('get' , {url:'/tomato' , data:{message:'pony'}} , function(response){});

模仿sails socket.get()函数,但它无效。

sails登录终端显示以下消息:未返回会话数据,并且第一次保存会话数据时遇到错误:undefined。

1 个答案:

答案 0 :(得分:2)

抱歉,你不得不放弃!这是一个相当普遍的问题,通过套接字与第三方进行通信。它实际上与Sails助手函数无关,使用socket.emit复制socket.get功能是完全有效的。不幸的是,在Sails v9中,这个案例的错误消息(明显)被破坏了,但要点是:在连接套接字之前,需要从第三方域获取cookie。这意味着向该域发出JSONP请求。 Socket.io实际上可以为您执行此操作,但您可能必须在调用io.util.ua.hasCORS = false之前手动设置io.connect。或者,您可以在远程服务器上创建JSONP端点并自行命中。无论哪种方式,一旦你有第三方cookie,套接字握手应该可以正常工作,并允许你的站点和Sails服务器之间的完美通信。

修改

io.util.ua.hasCORS方法无效,因为事实证明 - 它会导致向远程服务器发出JSONP请求,但响应不会附加cookie,因此它不会得到完成的工作。但是,当下一版本的Sails发布时,它将包含一个从外部域请求cookie的机制,并将在sails.io.js内的后台自动处理连接。另请注意,您需要在Sails应用中的authorization文件中将false设置为/config/sockets.js,以便允许套接字从远程域进行连接。