【问题标题】:Express and realtime apps. Persist updates from client to server to client快速和实时应用程序。从客户端到服务器到客户端的持久更新
【发布时间】:2014-01-06 01:44:09
【问题描述】:

我正在编写一个实时应用程序。基本原理就像聊天,但用户分享 youtube 视频而不是短信。后端还没有完全做完,不知道怎么做。但我对所做的事情有一些疑问。

现在,使用用户/通行证、FB、Twitter 的用户身份验证运行良好,并且凭据存储在我的数据库中。用户登录也可以正常工作。错误消息得到flashed 很好。

我正在使用 mongodb (mongoose) 并在后端表达。它不是基于 API 的设计,因为我不知道如何在 API 中使用用户身份验证(我可以制作 GET/POST/PUT/DELETE API,只是不知道如何在其中进行身份验证)。

例如,当用户使用主页登录时,凭据会在 express.js 路由中使用 req.body.<field> 进行验证。如果通过身份验证,则将用户重定向到仪表板,否则重定向到 signin 并使用 Flash 消息。因此,没有 Ajax 调用,而且现在,该应用程序无论如何都不是实时的。不过我希望它是实时的。

因此,我有 3 个问题:


  1. 我正在使用模式窗口(引导程序)来要求用户更新配置文件。模态显示很好,除了我想要显示的字段没有显示。密码和电子邮件字段为空,即使我有 value 属性。

    input.form-control.dash(type="password", name="newuserpassword", ng-minlength=8, ng-model="password", value="__USE_EXISTING__")
    input.form-control.dash(type="email", name="newuseremail", required=true, ng-model="email", value=user.email)
    

    http://snappy-app.com/s/read.php?pass=9fc7ffa1e2b2140aad5232d5733f4caf

  2. 我希望当用户编辑“保存”按钮时,模式中的消息应该是任何错误,或者显示更新成功。事实上,现在,我的更新方法并没有这样做。除了重定向用户,我不知道如何实现我想要的。

    exports.update_user = function(req, res) {
        var user = new User({
            'username' : req.user.username,
            'password': req.body.newuserpassword || ,
            'email': req.body.newuseremail
        });
    
        console.log(user);
    
        user.save(function(err) {
            if (err) {
                console.log(err);
                for (var field in err.errors) {
                    var error = err.errors[field].message;
                    req.flash('error', error);
                }
                res.redirect('/dashboard');
            } else {
                req.logIn(user, function (err) {
                    if (!err) {
                        req.flash('success', 'Done!');
                    } else {
                        req.flash('error', 'Something went wrong.');
                    }
                });
            }
        });
    }
    
  3. 用户通过单击“保存”更新值后,模式将关闭。用户仍然可以单击“编辑”链接再次更改值,并且模式将打开。现在,根据我所阅读的内容,用户不会看到更改,因为没有页面/模式重新加载。如何确保用户看到更新的值?


感谢任何帮助。

【问题讨论】:

  • 有人有意见吗?

标签: javascript node.js authentication express mongoose


【解决方案1】:

当我读到你的文字时,我想: “嗯,他试图进行 Ajax 调用,让视图显示错误或继续”

当我阅读您的代码时,我认为: “嗯,这是一个同步的“给我所有页面”的呼叫”

你想要哪个版本?

异步的?所以我们可以向您解释 Ajax 原理,而您真正的问题是 UI 更新。 同步的?这绝对是一个 UI 问题,你应该为它添加一个标签。

【讨论】:

  • 我从 node/express 堆栈开始,所以我不知道我含糊其辞。我将编辑帖子以包含更多细节。另外,你为什么说代码是同步的?这些方法与回调一起使用。
  • 我说的不是服务器内部堆栈,而是整个堆栈。如果提交失败,您是否希望发布帖子并刷新整个网页并显示错误,或者如果提交成功则刷新另一个页面?或者您是否希望视图对服务器进行异步调用,以 json 响应将被修改的当前视图?
  • 最好是后者。这将有助于使我的应用程序实时运行,并且无需刷新页面。
  • 但是如果错误或成功,您的代码会呈现一个完整的 html 页面...不是吗?
  • 现在可以了。但为了获得更动态的感觉,我想要这样:用户点击“编辑个人资料”,在当前页面顶部打开一个模式,用户更改密码,如果成功,关闭模式,如果没有,不重新加载页面,显示模态中的错误。
猜你喜欢
  • 2011-08-07
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多