【问题标题】:How to display users on current page?如何在当前页面显示用户?
【发布时间】:2017-04-26 18:03:42
【问题描述】:

例如,我有一个 url 为“/foo”的页面,我需要在此页面上显示经过身份验证的用户昵称。是否有任何默认的 node.js/passport 功能,或者我需要将此页面的每个用户添加到数据库并使用 websockets 显示?

用户架构:

var userSchema = new Schema({
    email: {type: String, required: true, unique: true },
    password: {type: String, required: true },
    nickname: { type: String, default: 'User'},
    createdAt: { type: Date, default: Date.now }
});

检查用户是否登录:

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    req.session.oldUrl = req.url;
    res.redirect('/');
}

【问题讨论】:

  • 您可以在用户登录时将用户昵称添加到快递'req,然后连同所有后续回复一起发送。
  • @promisified,我知道如何只添加一个当前用户“req.user.username”,但是如何在此页面上添加其他用户?
  • 您也许可以使用本地数组并将其与所有后续响应一起发送?所以基本上每次用户登录时都会将昵称放入数组中,然后发送数组。只是一个想法。
  • 假设您将用户会话存储在 MongoDB 中,您能否发布会话集合的架构
  • @Dan Green-Leipciger 完成。

标签: javascript node.js express websocket passport.js


【解决方案1】:

这就是我在托管故事的服务中解决它的方法。我必须在当前故事页面上显示用户数量和他们的姓名。我想让解决方案足够简单,所以我决定在 SQL 中使用一个简单的表。

在一个单列的 SQL 表中,我存储了PAGE_{PAGEID}_USER_{USERID}

对于用户获取的每个页面,我在此表上添加了一个条目,并使用正则表达式 PAGE_{PAGEID}_USER_(.*) 查询表列,更新时间不到当前时间的 1 分钟。

这将为您提供过去 1 分钟内当前页面上用户的 ID。

PS:正确的做法是在宽列存储中做同样的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2019-08-09
    • 2021-12-24
    • 2021-05-09
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多