我正在开发一个使用sails的应用程序,我必须从外部源连接。它们可以是IOS或Android移动应用程序,也可以只是外部html客户端。
在这方面,我不能使用sails辅助方法来使控制器操作处理Web套接字请求。
当我读完sails.io客户端文件时,我想我可以使用。
socket.emit('get' , {url:'/tomato' , data:{message:'pony'}} , function(response){});
模仿sails socket.get()函数,但它无效。
sails登录终端显示以下消息:未返回会话数据,并且第一次保存会话数据时遇到错误:undefined。
答案 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
,以便允许套接字从远程域进行连接。