【问题标题】:How to update particular id information in express js如何在express js中更新特定的id信息
【发布时间】:2019-08-22 08:22:16
【问题描述】:

我想从 MongoDB 中的用户用户集合中按特定 ID 更新信息。我正在使用 ExpressJS。

现在从我的代码中我只能更新登录用户信息。作为超级管理员,我想按 ID 更新用户信息。我需要在这里做什么?

现在在我的代码中,当超级管理员登录时,他/她只能更新他/她自己的信息。我希望超级管理员更新用户信息

router.put('/edit', checkAuth, function (req, res, next) {
    if(req.userData.role === 'superadmin') {
    const id = req.userData.userId;
    User.findOneAndUpdate({ _id: id }, {$set: req.body}, { new: true }, (err, doc) => {
                if (err) return res.send(err.message)
                if (doc) return res.send(doc);
            })
    } else {
        res.status(401).send(["Not authorized. Only super admin can update details."]);
    }       
});

如何从集合中更新用户信息?

【问题讨论】:

  • 您要更新的用户id在哪里?您的代码将当前用户的id 传递给findOneAndUpdate,您需要传递要更新的用户的id(通过req 对象传递)。
  • @MoadEnnagi 是的,但是当我进入编辑页面时,我只有一个 url /edit。因此,除非单击了特定用户的编辑选项,否则我无法路由。然后我可以使用类似/edit/:userId 的东西。我不想再次重定向。在这种情况下可以编辑吗?

标签: node.js express mongoose routes put


【解决方案1】:

您需要通过请求内容指定另一个用户的ID,在Express中这可以通过path parameter轻松实现:

// Example client request: PUT /edit/507f191e810c19729de860ea
router.put('/edit/:userId', checkAuth, function (req, res, next) {
  if (req.userData.role === 'superadmin') {
    const id = req.params.userId;
    User.findOneAndUpdate({ _id: id }, {$set: req.body}, ...);
  } else { /* ... */ }
});

如果更改请求路径 (/edit) 不适合您,您可以选择通过请求正文指定目标用户 ID(您还需要更新客户端请求以传递 id以及您的新用户数据):

router.put('/edit', checkAuth, function (req, res, next) {
  if (req.userData.role === 'superadmin') {
    const { id, ...newUserData } = req.body;
    User.findOneAndUpdate({ _id: id }, {$set: newUserData}, ...);
  } else { /* ... */ }
});

【讨论】:

  • 对不起,如果这令人困惑,这是JS destructuring syntaxnewUserData 基本上是 req.body 减去 id 属性(您不想在 mongodb 用户文档中设置)。
  • 那么在这种情况下,我如何测试特定 id 的 API?这是我应该如何通过终点/edit/:userId
  • 还有 userId 在 req 中提到的地方?我会抛出错误
  • 已解决:您的id参数丢失const id = req.params.userId; const newUserData = req.body; User.findOneAndUpdate({ _id: id }, {$set: newUserData}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 2019-04-17
  • 1970-01-01
相关资源
最近更新 更多