skip to Main Content

In my node.js express application I am retrieving a user from my database

const newUser = await User.create({
      username,
      password,
      email,
      avatar,
})

but before sending the response with the user object I want to remove the password.

delete newUser.password;
return res.status(200).json({ token, user: newUser });

but in my response the password is returned.

console.log(JSON.stringify(newUser))
returns:

{"_id":"11111111","username":"dylan","email":"[email protected]","admin":true,"password":"******"}

2

Answers


  1. query return value is document not javascript object

    • Documents have a toObject method which converts the mongoose document into a plain JavaScript object.
    • first convert it to object and then use delete on each property you want

    also with mongoose it can done more properly and automatically

    User.methods.toJSON = function () {
      const user = this;
      const userObj = user.toObject();
      delete userObj.password;
      return userObj;
    };
    

    every time you send this document as response it convert to JSON and every time that JSON.strigify() is call on a document it call this toJSON() method

    Login or Signup to reply.
  2. Maybe you can also do

    delete newUser._doc.password 
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search