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

Sockets Sails.js 0.10-rc5中的实时模型事件,sockets,real-time,deprecated,sails.js,subscribe,Sockets,Real Time,Deprecated,Sails.js,Subscribe,我一直在使用Sails.js版本0.10-rc5(目前是@beta版)构建一些实时功能 为了完成任何事情,我一直在遵循关于这个主题的sweet SailsCast教程() 它讨论通过模型控制器中的“订阅”操作订阅模型。然后在客户端监听,等待服务器发出消息。虽然我似乎没有收到任何消息,但这很简单 我尝试这样做是为了实时更新我的用户模型中发生的任何变化,或者如果创建了新的模型。。所以我可以实时显示登录状态等。几乎和《帆船》里解释的一样 在我的终端中,有两件事值得注意,第一件是: debug: Dep

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

为了完成任何事情,我一直在遵循关于这个主题的sweet 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.)
“subscribe”方法似乎已被弃用。谁能告诉我这是否正确,并告诉我如何解决这个问题?我一直在检查调试消息中对文档的引用,尽管它只是将我指向全局文档页面。我一直在别处寻找答案,但没有找到任何有用的

我得到的第二个信息是:

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”策略。当用户未通过身份验证时,它将重定向到会话/新页面。必须有人登录才能使用该应用程序。当我从“订阅”操作中删除“isAuthenticated”策略时,警告消失。尽管这意味着任何人都将通过套接字(当我让它工作时)获得更新,即使他们注销了。-我真的不觉得人们只是坐在登录屏幕前,搜寻那些只针对登录用户的实时消息


谁能帮我让实时更新工作?我真的很感激

至于没有收到套接字消息,问题是您正在遵循v0.9.x的教程,但您使用的是Sails的beta版,其中PubSub进行了一些更改。关于未接收的“创建”事件,请参见

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

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");
        }
    }
}

非常感谢特别是对迁移文档的引用在将来可能会非常有用。还没有遇到这些:)。