node.js - Mongodb 已更新,但呈现旧信息

标签 node.js mongodb authentication mongoose passport.js

我刚开始使用 MEAN 堆栈,并且正在尝试实现用户服务。我希望用户能够编辑其显示名称等信息。

使用以下代码,我可以在 Mongo 数据库中看到更改已正确进行,但是当我登录 req.user 时,我看到它显示的是未更新的版本,因此未呈现更新.

请帮忙!

var router = require('express').Router();
router.route('/users/:user_id/changeName')
    // Update user's display name
    .post(function(req, res) {
        User.findByIdAndUpdate(req.params.user_id, { $set: { name: req.body.newName }}, function(err, user) {
            console.log(req.user);
            console.log(req.body.newName);
            res.render('profile.ejs', { user: req.user });
        });
    });

最佳答案

您没有提供有关如何设置 req.user 的任何信息,但如果您点击 User 集合来填充每个请求的 req.user,那么您将拥有用于下一个请求的最新用户*。

如果您只是使用回调中返回的 user 对象进行 res.render 操作,您将看到更新后的用户:

res.render('profile.ejs', { user: user });
<小时/>

* 实际上,您可能不希望每个请求都访问您的 User 集合。理想情况下,您应该有一些 session 中间件,可以在用户 session 期间缓存 user 对象。在这种情况下,您需要在更新 mongo 中的文档后更新 session 对用户的引用。

关于node.js - Mongodb 已更新,但呈现旧信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35238602/

相关文章:

node.js - 如何让 VSCode 运行像 "npm start"这样的 Node 应用程序?

javascript - 公会成员添加不起作用(discordjs)

mongodb - 在深度嵌套文档查询中使用 MongoDB 的位置运算符 $

javascript - Mongoose Reconnect 事件在一段时间后没有被触发

javascript - 将正则表达式放入字符串中

node.js - NodeJS-Socket.IO 设置 : served static content no handshake (Ubuntu on Rackspace Cloud Server)

MongoDB 没有从 ubuntu 16.04 开始

php - 注册php、mysql密码、数据库

ssl - 如何使用 AFNetworking 创建带有自签名证书的 iOS HTTPS 登录?

php - 谁用 crypt() 创建了一个认证系统