Dylan L.
Dylan L.

Reputation: 1317

delete operator not functioning as expected in node.js

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":"******"}

Upvotes: 0

Views: 215

Answers (2)

Sanjeev Shakya
Sanjeev Shakya

Reputation: 157

Maybe you can also do

delete newUser._doc.password 

Upvotes: 1

Mohammad
Mohammad

Reputation: 108

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

Upvotes: 4

Related Questions