【问题标题】:How to get the return of a created object in Mongoose with express api如何使用 express api 在 Mongoose 中获取已创建对象的返回
【发布时间】:2019-06-05 03:06:24
【问题描述】:

在我的 express api 中,我使用 mongoose 在 api 上使用 User.create 创建了一个新用户。如何让创建的对象返回以包含在响应中?

我创建对象的方法是:

async store (req, res) {
const { name, lastName, email, password } = req.body

if (await User.findOne({ email })) {
  return res.status(400).json({ error: 'User already exists' })
}

try {
  await User.create({
    name,
    lastName,
    email,
    password,
    role: 'USER_ROLE'
  })

  res.status(201).json({
    ok: true,
    message: 'User created'
  })
} catch (e) {
  res.status(500).json({
    ok: false,
    message: 'Failed to create User'
  })
}

}

我想返回在 res 上创建的用户,比如:

 res.status(201).json({
    ok: true,
    message: 'User created',
    user: user

  })

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:
    async store(req, res) {
      const { name, lastName, email, password } = req.body
    
      if (await User.findOne({ email })) {
        return res.status(400).json({ error: 'User already exists' })
      }
    
      try {
        let user = await User.create({
          name,
          lastName,
          email,
          password,
          role: 'USER_ROLE'
        })
        user = user.toJson();
        delete user.password;
        delete user.role;
        res.status(201).json({
          ok: true,
          user: user,
          message: 'User created'
        })
      } catch (e) {
        res.status(500).json({
          ok: false,
          message: 'Failed to create User'
        })
      }
    }
    

    您可以使用将 mongoose 对象转换为 JSON

    user.toJson()
    

    然后您可以删除不想发送到响应中的字段。

    delete user.password;
    

    【讨论】:

    • 这种方式按预期工作。但在这种情况下,我如何从返回的对象中删除一些字段?我想从退货中删除密码和角色。这是可能的?谢谢
    • 在定义架构的地方,可以添加schema.set('toJSON', { transform: (document, returnedObject) => { delete user.password; delete user.role; } }) 这基本上是覆盖toJSON 方法的输出。更多信息:fullstackopen.com/en/part4/…
    猜你喜欢
    • 2016-09-12
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2021-12-03
    • 2016-01-23
    相关资源
    最近更新 更多