How to get the return of a created object in Mongoose with express api

Viewed 8521

In my express api, using mongoose, i create a new user on api using User.create. How i can get the return of the created object to include on the response?

My method to create a object is:

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'
  })
}

}

I want to return the user created on the res, like:

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

  })
1 Answers
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'
    })
  }
}

You can covert mongoose object to JSON using

user.toJson()

Then you can delete the fields that you don't want to send into the response.

delete user.password;
Related