Home > Enterprise >  delete operator not functioning as expected in node.js
delete operator not functioning as expected in node.js

Time:04-12

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

CodePudding user response:

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

  • Related