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

标签 javascript api websocket socket.io sails.js

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

在这方面,我无法使用 sails 辅助方法来使 Controller 操作处理 Web 套接字请求。

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

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

模仿 sails socket.get() 函数,但它不起作用。

sails 登录终端显示以下消息:未返回 session 数据,并且首次保存 session 数据时遇到错误:未定义。

最佳答案

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

编辑

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

关于javascript - 如何在不使用 sails.io 客户端帮助程序方法的情况下向 sails.js Controller 发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22228804/

相关文章:

javascript - 将 HTML 元素作为参数传递给函数与使用 getElementById 获取相同元素

javascript - 使用 MySQL 和 Python 通过 webapp(PHP,javascript)控制串口

javascript - 使用 javascript 定位表格内的所有标签

javascript - 没有编码为 UTF-8 或 base64 的 websocket 二进制数据

node.js - 是否可以在不使用socket.io的情况下在 Node 中制作聊天应用程序

javascript - jsp-如何在 JavaScript 函数中复制 URL?

api - 获取 Google API 帐户

angular - 如何使用 Angular 8.0.2 隐藏 API key

Python - 分割非json请求的响应

java - DWR 与 Websocket