问题标签 [sails.io.js]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 在angular2中链接sails.io.js
我在使用带有 angular2 的sails.io.js 时遇到问题。我使用 angular2-sails 库。
首先,我决定使用 app.component.ts 中的代码
它可以工作,但是当我启动应用程序时,我也有这些消息“套接字正在尝试重新连接到 Sails..” 我检查了一下,它正在尝试连接到端口 4200。
我用sails.io.js
在 angular-cli.json 中。但我尝试了别的东西:
在 index.html 中,我的浏览器返回它无法在“ http://localhost:4200/sails.io.js ”或“ http://localhost:4200/src/sails.io.js ”加载脚本
文件夹:
我不知道为什么在 angular-cli.json 中调用它时它会尝试连接到 4200,以及为什么在索引中调用它时无法访问我的sails.io.js。
node.js - 发回响应时出现 Sails 错误
好的,所以套接字连接和一切。我可以调试控制器,但是当它到达 line return res.ok() 时它会中断。我还有一个 res.json({message: "hello"})。但我得到同样的错误。
这就是我所说的。
我得到的错误是:
有人可以帮忙吗?我不知道为什么这会失败。
先感谢您。
node.js - 使用 websockets 跟踪用户在线状态时重复的事件处理程序?
我想使用 websockets 来跟踪用户最后一次出现的时间,以及他们当前的在线状态(如果他们当前已通过身份验证并使用应用程序)。
我有适用于应用程序某些部分的策略,因此用户将登录然后被引导到适用该策略的概述。
如果用户未通过身份验证,或者如果他们是但会话信息与数据库的信息冲突,则概览将以 notFound 响应。
如果这些简单检查通过,则用户存在,因此应创建两个事件处理程序:
- 如果会话过期前没有活动,通知客户端返回认证页面
- 当客户端断开连接时,更新他们最后一次出现的时间并改变在线状态
这是策略代码:
我遇到的问题是,这将在页面最初加载时起作用,但是如果我重新加载概述页面,那么我最终会得到重复的事件处理程序:
加载页面一次(记住会话年龄是 10 秒进行测试):
但是如果我重新加载页面:
因此,如果是这种情况,我认为没问题,那么也许我可以为事件侦听器创建一个命名函数,然后最初删除事件侦听器:
但这会导致相同的重复处理程序,因此我从处理程序中删除了所有 req/res 代码:
并在创建事件时进行了修改:
结果按我的预期工作,在重新加载页面时没有创建任何重复的事件处理程序:
有人可以向我解释我哪里出错了,我真的不明白为什么:
导致重复的事件处理程序,而:
才不是?
如果有人可以就我在这里出错的地方或如何更好地达到预期结果提供任何建议,那么将不胜感激,非常感谢!
以下是我用来达到这一点的一些参考资料:
- https://gist.github.com/mikermcneil/6598661
- https://github.com/balderdashy/sails-docs/blob/1.0/concepts/Sessions/sessions.md#when-does-the-sailssid-change
- 如何在会话过期时断开套接字
- https://stackoverflow.com/a/5422730/2110294
- https://github.com/expressjs/session/issues/204#issuecomment-141473499
- https://stackoverflow.com/a/33308406/2110294
socket.io - io.sails.js 捕获连接被拒绝的方式
我的问题是关于捕获套接字连接被拒绝的方法。
我在用着
根据文档
https://sailsjs.com/documentation/reference/web-sockets/socket-client/io-socket-on
只有两个系统事件:
是否有其他可能捕获连接被拒绝?
javascript - Sails.JS 的发布方法在控制器中不起作用,但在控制台中起作用
目前,我正在探索 Web 开发,以了解所有炒作的内容。除了遵循一个小的“在 Node.JS 中创建你的第一个 CRUD 应用程序”和一些 JavaScript 的正式培训之外,我没有任何经验。
我是 JavaScript、NodeJS、Sails.JS 和 WebSockets 的新手。
我目前的问题是这样的:
我正在尝试开发的应用程序接收带有 JSON 对象的 POST 调用。这是应用程序的输入部分。这些 POST 调用来自任何随机主机。
输出是一个网页,它通过监听 Sails.JS 驱动的 WebSocket 系统(称为sails.io.js)进行自我更新。
基本上,来自任何主机的每个 POST 都应该在 WebSocket 上产生一个事件。
由于我没有构建正式的 REST API,因此我必须自己在 Sails.JS 中定义一些部分。我确实启用了蓝图。
首先,在处理 POST 调用的控制器中,我可以调用下面的代码,以便现有的 WebSockets 可以接收正在创建的新 ServiceHeartBeatSession 的事件。这里提到的所有服务器端代码都位于控制器中或在控制台中执行。
然后,执行invoke 方法将这个事件发送给所有正在监听的WebSocket。
但是,.publish 方法不会导致现有 WebSocket 的事件。除非我自己在控制台中执行它。WebSocket 是这样注册的:
我对源代码进行了一些挖掘,并尝试自己调试它。这是我到目前为止发现的:
- 在控制台中运行 .publish 调用会产生所需的结果。
- 似乎 .addRoomMembersToRooms 是 .publish 在控制台中工作的要求。所以我假设 .addRoomMembersToRooms 按预期工作。
我尝试了下面的替代方法,但这在控制器中不起作用。但是,它确实在 Node 控制台中工作。
/li>以下按预期工作,但我不喜欢使用它。
/li>上面的尝试缺少房间选择,所以我挖得更深了。下面的调用是 .publish 方法的结果。但是,只有在控制台中重复此操作后,它才起作用。
/li>
有人有想法么?
node.js - 为什么我重新启动计算机后sails.js会崩溃
在使用sail.js 方面,我是新手。
我安装了 Sail.js,然后使用sails lift我启动了应用程序,它运行良好。
过了一段时间,我关掉了我的笔记本电脑,只是为了把它重新打开,然后我就出错了。它不会开始。
我在另一个文件夹中创建了一个新项目,它运行良好。我关闭了我的笔记本电脑并再次打开它,我得到了同样的错误。
请问到底发生了什么。
这是错误
C:\emmsdan\main\mws-looper-two\node_modules\machine\lib\Machine.prototype.exec.js:1 (function (exports, require, module, __filename, __dirname) { MZP
socket.io - 从 shell 脚本进行 Sails.js 套接字广播
我有一个 Sails 应用程序和几个由 cron 或其他外部触发器运行的Sails Shell 脚本(主要是我在 shell 中输入)。我想通过内置的 Sails 套接字客户端在浏览器中实现通知,该客户端有效,但仅在sails.sockets.broadcast()
从 Sails 控制器调用时才有效,也就是说,我能够从docs运行示例。
我无法成功从 shell 脚本甚至从 广播消息sails console --dontLift
,似乎已注册的客户端仅在服务器上运行的套接字上,并且 shell/控制台实例化了另一个套接字......是有道理的,但不是不可能得到那些客户?是否有任何解决方案可以将消息从 Sails shell 脚本广播到已注册的浏览器客户端?
此外,我可以在服务人员中使用 Sails 套接字来创建推送通知吗?我知道 socket.io 与 Push 不同,但在某种程度上可行吗?
更新
感谢@nahanil 指向redis,我在文档Realtime communication in a multi-server (aka "clustered") environment中找到了这篇文章
谢谢!卢卡
sails.js - https 在sailsjs的localhost中不起作用
我正在尝试在我的本地系统中设置 ssl。我正在使用带有sails js应用程序的Windows机器。
这是我所做的配置。
当我在命令下方启动时,它会显示这样的图像, 但是当我在浏览器https://localhost中运行此应用程序时,它会显示错误。
错误:
sails.js - 如何防止插入使用sails.js中的查询字符串传递的数据以进行发布请求?
我在 mysql 中创建了新表,还在sails.js 中创建了模型和控制器。现在我正在尝试使用帆插入数据。正如我们所知,当我们在sails 中创建新模式时,默认情况下它会为我们创建新的post、get 和其他api。
现在我正在尝试使用 post api 使用查询字符串和 request.body 插入数据,并且两者都在工作但我需要将数据插入到使用 request.body 而不是 post 请求中的 request.querystring 数据传递的数据库中。 我该怎么做???
- 在发布请求中使用查询字符串发布数据 => 工作正常
我在这里问过同样的问题https://gitter.im/balderdashy/sails和https://github.com/balderdashy/sails/issues/6918
node.js - 当我更改数据时,为什么客户端没有从已订阅 Sails.js 模型的套接字接收更新?
在过去的几个小时里,我一直试图弄清楚如何使用连接到 Sails.js 套接字的 React Native 客户端获取实时更新。
我没有看到任何我知道的错误消息。
在下面的代码块中,我从 React Native 功能组件 discover.js 发送一个请求到路由用户/登录处的 Sails 服务器,在那里我订阅了用户模型。然后,我使用 io.socket.on('user', ...) 在客户端收听通知。但是,当我更改名为“Irene”的用户之一的值时,即 find() ORM 方法获得的结果,io.socket.on('user', ...) 事件不会在客户如预期。
discover.js(一个 React Native 功能组件)
login.js(Sails.js 控制器文件 - /api/controllers/user/login.js
User.js(Sails.js 模型文件 - /api/models/User.js)
我尝试了很多不同的东西。我所知道的工作/可能不是问题的根源:
- find() 方法正在选择预期的行。三个用户的名字是 Irene,findOne 正在获取这些用户。
- _.pick 方法正确地返回了这些用户 [1, 5, 30] 的主键。
- users 表的主键是
id
,这在模型文件 User.js 中如此指示 - io.socket.on('user', ...) 甚至可以在建立套接字连接之前调用,因为文档说连接之前附加的事件被放置在队列中并在连接发生时运行。所以我不认为缺乏联系是这里的问题。
- 在回调函数 serverResponded 的参数“body”中返回了三个名为 Irene 的用户。
- 我尝试将 User.subscribe 的第一个参数设置为 req.socket(如上面的代码所示)和简单的 req,但都不起作用。
帮助将不胜感激。