首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sails.js 0.10-rc5中的实时模型事件

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

Stack Overflow用户
提问于 2014-05-02 10:36:23
回答 1查看 1.9K关注 0票数 1

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

为了完成任何事情,我一直在学习关于这个主题的甜蜜的SailsCast教程(sailsCast链路),它讨论通过模型控制器中的“订阅”操作订阅模型。然后在客户端监听它,等待服务器发出消息。很简单,虽然我似乎没有收到任何信息。

我试图这样做是为了实时更新用户模型中的任何更改,或者如果创建了新的模型。这样我就可以实时显示登录状态等。这正是sailsCast中所解释的内容。

在我的终端中,我将看到两件值得注意的事情,第一件事是:

代码语言:javascript
复制
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.)

看来“订阅”方法已经被废弃了。有人能告诉我如果这是正确的,并告诉我如何解决这个问题?我一直在查看调试消息中对文档的引用,尽管它只是指向全局文档页面。我一直在其他地方寻找答案,但没有发现任何有用的东西。

我得到的第二个信息是:

代码语言:javascript
复制
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”策略时,警告就会消失。尽管这意味着任何人都会通过套接字获得更新(当我让它开始工作时),甚至当它们被注销时。-我真的不觉得人们只是坐在登录屏幕上,找出那些只针对登录用户的实时信息。

有人能帮我让实时更新开始工作吗?我真的很感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 14:59:47

至于没有接收到的套接字消息,问题是您正在遵循0.9.x版本的教程,但是您使用的是PubSub已经经历了一些更改的beta版本的Sails。这在这个答案中涉及到“创建”事件未被接收。

您的第二个问题根本不是关于套接字;您只需要重新考虑一下您的体系结构。如果您想使用套接字请求来登录用户,那么您必须更加小心地重定向他们,因为正如消息所述,您不能在套接字上呈现视图。从技术上讲,您可以通过套接字将一堆HTML发送回客户端,并用它替换当前的页面,但这不是很好的实践。相反,您可以做的是,在您的isAuthenticated策略中,检查请求是否通过套接字发生(使用req.isSocket),如果是的话,发送一个前端可以解释为“您现在应该重定向到登录页面”的消息。类似于:

代码语言:javascript
复制
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");
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23426095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档