Javascript 虽然I';我在变异它
接下来的代码片段将从用户JSON对象中删除password属性,并将其作为响应返回。发生的情况是,密码属性仍在返回Javascript 虽然I';我在变异它,javascript,node.js,json,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.p
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
});
});
}
不确定问题是否与异步编译有关您可以在不使用密码的情况下创建新对象,并在响应中使用该密码:
const{password,…restOfUser}=user
res.status(200).json({
状态:正确,
消息:“已验证!”,
数据:{
代币
用户:restOfUser
}
})
我认为您应该删除这样的元素:删除用户['password'],而不是使用delete user.password代码>使用Reflect.deleteProperty(用户,“密码”)
然后检查它是否返回true
。以上两条注释不正确,请参阅和。Asker使用delete是正确的,问题可能是代码没有显示。@Klaycon确定属性是否实际被删除有什么不正确之处?@zfrischdelete user。如果属性绝对不在对象上,password
也将返回true
,否则返回false
,必须使用Reflect是完全不必要的,而且是一种非常巧妙的解构用法。必须记住,这是从对象复制大多数但不是所有属性的方法。