Nodejs 首页个人信息没有更新的原因?

Nodejs 首页个人信息没有更新的原因?

看了一下nodeclub的源码,发现首页个人信息部分没有更新的原因是controlles里site.js里没有取用户的个人信息部分。 var proxy = EventProxy.create(‘topics’, ‘tops’, ‘no_reply_topics’, ‘pages’, function (topics, tops, no_reply_topics, pages) { res.render(‘index’, { topics: topics, current_page: page, list_topic_count: limit, tops: tops, no_reply_topics: no_reply_topics, pages: pages }); }); 求讲解是否正确。


2 回复

在 Node.js 应用中,如果首页的个人信息部分没有更新,通常是因为在渲染页面时没有正确地从数据库或缓存中获取并传递用户的个人信息。根据你提供的代码片段,我们可以看到 site.js 文件中的 proxy 函数负责处理首页的数据,但并没有包含用户个人信息的部分。

分析与解决方案

假设你的应用使用了某种用户认证机制(例如 Passport.js),你需要确保在渲染首页之前,已经获取到了当前登录用户的信息,并将其传递给前端模板进行渲染。

示例代码

以下是一个可能的改进方案,展示如何在 site.js 中添加获取用户信息的逻辑:

const User = require('./models/User'); // 假设你有一个 User 模型

// 在proxy函数中添加获取用户信息的逻辑
var proxy = EventProxy.create('topics', 'tops', 'no_reply_topics', 'pages', 'user', function (topics, tops, no_reply_topics, pages, user) {
    res.render('index', {
        topics: topics,
        current_page: page,
        list_topic_count: limit,
        tops: tops,
        no_reply_topics: no_reply_topics,
        pages: pages,
        user: user // 将用户信息传递给前端
    });
});

// 获取用户信息
User.findById(req.user.id, (err, user) => {
    if (err) {
        console.error(err);
        return next(err);
    }
    proxy.emit('user', user); // 发射用户信息
});

// 其他逻辑保持不变...

解释

  1. 引入用户模型:首先需要引入用户模型,以便可以查询数据库中的用户信息。
  2. 修改proxy函数:在 proxy 函数中添加一个新的参数 'user',用于接收用户信息。
  3. 获取用户信息:通过 req.user.id 获取当前登录用户的ID,并调用 User.findById() 方法从数据库中获取用户信息。
  4. 传递用户信息:将获取到的用户信息通过 proxy.emit('user', user) 发送给 proxy 函数,最终传递给前端模板进行渲染。

这样,你就可以确保在渲染首页时包含了用户的个人信息,从而解决了个人信息没有更新的问题。


从你提供的代码片段来看,site.js 中的 proxy 对象并没有包含用户个人信息的获取逻辑。因此,首页渲染时确实不会包含用户的个人信息。

解释

在 Node.js 应用中,通常会在控制器中通过数据库查询来获取用户信息,并将这些信息传递给模板进行渲染。根据你的描述,当前的代码逻辑中并未涉及用户个人信息的获取和传递。

示例修复代码

  1. 添加用户信息获取逻辑

    proxy 中添加获取用户信息的部分:

    var proxy = EventProxy.create('topics', 'tops', 'no_reply_topics', 'pages', 'userInfo', function (topics, tops, no_reply_topics, pages, userInfo) {
        res.render('index', {
            topics: topics,
            current_page: page,
            list_topic_count: limit,
            tops: tops,
            no_reply_topics: no_reply_topics,
            pages: pages,
            userInfo: userInfo // 添加用户信息
        });
    });
    
    // 假设我们有一个函数 getUserInfo 来获取用户信息
    function getUserInfo(userId, callback) {
        User.findById(userId, function(err, user) {
            if (err) return callback(err);
            callback(null, user);
        });
    }
    
    // 获取当前登录用户的 ID
    var userId = req.session.userId;
    
    // 使用 EventProxy 监听用户信息事件
    proxy.assign('userInfo', getUserInfo.bind(null, userId));
    
  2. 确保前端模板使用 userInfo

    在模板文件(如 index.ejs)中,确保你可以访问并显示 userInfo 变量。例如:

    <div class="user-info">
        <p>Name: <%= userInfo.name %></p>
        <p>Email: <%= userInfo.email %></p>
    </div>
    

通过这种方式,你可以在首页渲染时包含用户的个人信息。确保在实际应用中替换 User.findById 为适合你应用的用户模型查询方法。

回到顶部