尽管我正在对其进行突变,但对象返回的结果相同

时间:2019-12-31 22:18:28

标签: javascript node.js json

即将到来的代码片段将从用户JSON对象中删除password属性,并将其作为响应返回。发生的是密码属性仍在返回!


const signin = (req, res, next) => {
    let requestBody = req.body;

    userModel.findUserByEmail(requestBody.email).then(user => {
        bcrypt.compare(requestBody.password, user.password, (error, result) => {
            if (!result) {
                return res.status(500).json({
                    status: false,
                    message: 'Auth Failed!',
                    error
                });
            }

            if (error) {
                return res.status(500).json({
                    error
                });
            }

            let token = jwt.sign({
                email: user.email,
                userId: user._id
            }, 
            process.env.JWT_KEY, 
            {
                expiresIn: "2h"
            });

            // remonve password key
            delete user.password

            res.status(200).json({
                status: true,
                message: 'Authenticated!',
                data: {
                    token,
                    user
                }
            });
        });

    }).catch(error => {
        return res.status(500).json({
                status: false,
                message: 'Auth Failed!',
                error
            });
    });
}

不确定问题是否与异步编译有关

1 个答案:

答案 0 :(得分:1)

您可以创建一个没有密码的新对象,并在响应中使用它:

const { password, ...restOfUser } = user

res.status(200).json({
  status: true,
  message: 'Authenticated!',
  data: {
    token
    user: restOfUser
  }
})