gpt4 book ai didi

sockets - Sails.js 0.10-rc5中的实时模型事件

转载 作者:行者123 更新时间:2023-12-03 12:05:22 25 4
gpt4 key购买 nike

我一直在使用Sails.js版本0.10-rc5(当前为@beta版本)来构建一些实时功能。

为了完成任何事情,我一直在遵循关于该主题的可爱的SailsCast教程(sailsCast link)
它讨论了通过模型 Controller 内的“订阅”操作来订阅模型。然后在客户端收听它,等待服务器发出消息。很简单,尽管我似乎没有收到任何消息。

我正在尝试执行此操作以获取用户模型中发生更改的任何内容的实时更新,或者是否创建了新的更新。因此,我可以实时显示登录状态等。几乎完全是在sailsCast中说明的内容。

在我的终端机中,我将注意到两件事,其中第一件事是:

debug: Deprecated:   `Model.subscribe(socket, null, ...)`
debug: See http://links.sailsjs.org/docs/config/pubsub
debug: (⌘ + double-click to open link from terminal)
debug: Please use instance rooms instead (or raw sails.sockets.*() methods.)

似乎已不赞成使用“订阅”方法。谁能告诉我这是否正确,并告诉我如何解决此问题?我一直在检查调试消息中对文档的引用,尽管它只是指向全局文档页面。我一直在寻找其他地方的答案,但没有发现任何有用的东西。

我收到的第二条消息是:
warn: You are trying to render a view (_session/new), but Sails doesn't support rendering views over Socket.io... yet!
You might consider serving your HTML view normally, then fetching data with sockets in your client-side JavaScript.
If you didn't intend to serve a view here, you might look into content-negotiation
to handle AJAX/socket requests explictly, instead of `res.redirect()`/`res.view()`.

现在,我非常确定这是因为我已将“isAuthenticated”策略添加到所有 Controller 和操作中。当用户未通过身份验证时,它将重定向到 session /新页面。必须有人登录才能使用该应用程序。当我从“订阅”操作中删除“isAuthenticated”策略时,警告消失。虽然这意味着任何人都可以通过套接字获取更新(当我可以使用它时),即使他们已经注销也是如此。 -我真的不觉得人们只是坐在登录屏幕上,钓出了仅适用于已登录用户的实时消息。

谁能帮助我让实时更新生效?我真的很感激!

最佳答案

就未收到套接字消息而言,问题在于您正在关注v0.9.x教程,但您使用的是Sails的Beta版本,其中PubSub进行了一些更改。 this answer涵盖了有关未接收到“创建”事件的信息。

您的第二个问题根本不是关于套接字的。您只需要重新考虑一下您的架构即可。如果要使用套接字请求登录用户,则在重定向用户时必须格外小心,因为如消息所述,您无法在套接字上呈现 View 。从技术上讲,您可以通过套接字将一堆HTML发送回客户端,并用它替换当前页面,但这不是很好的做法。相反,您可以做的是,在isAuthenticated策略中,检查请求是否正在通过套接字发生(使用req.isSocket),如果是,则发回一条消息,前端可以将其解释为“您现在应该重定向到登录页面”。就像是:

module.exports = function (req, res, next) {

if ([your auth logic here]) {
return next();
}
else {
if (req.isSocket) {
return res.json({status: 403, redirectTo: "/session/new"});
} else {
return res.redirect("/session/new");
}
}
}

关于sockets - Sails.js 0.10-rc5中的实时模型事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com