Javascript 从对象中删除属性在回调中失败
我必须发送jwt,但我不想包含password属性。我确实删除了结果。密码,但我仍然看到密码在那里。我尝试了Javascript 从对象中删除属性在回调中失败,javascript,node.js,express,Javascript,Node.js,Express,我必须发送jwt,但我不想包含password属性。我确实删除了结果。密码,但我仍然看到密码在那里。我尝试了result.password='我可以看到密码被修改了,为什么删除在这里不起作用 User.comparePassword(password, user.password , (err, result) => { if(result === true){ User.getUserById(user._id, (err,resu
result.password='
我可以看到密码被修改了,为什么删除在这里不起作用
User.comparePassword(password, user.password , (err, result) => {
if(result === true){
User.getUserById(user._id, (err,result) => {
delete result.password
console.log(result)
const secret = config.secret;
const token = jwt.encode(result, secret);
res.json({success: true, msg: token});
});
}else{
res.json({success: false, msg: 'Error, Incorrect password!'});
}
});
调用
object.freeze(result)
,结果对象可能已冻结。您可以使用Object.isfreeze(result)==true来确认。或者,delete result.password
将返回true
如果属性可以被删除,则返回false
否则。它应该可以工作。我看到这种情况的唯一方法是,例如,如果从getUserById
传入的结果已被“密封”一种解决方法是使用JSON方法-result=JSON.parse(JSON.stringify(result))
由于回调中的第一行应该执行一些模块,如lodash omit函数,您可以更新代码以显示如何测试修改密码吗?如果对象被冻结,则result.password='
将解析为空。哦哎呀!这是一条注释。冻结对象的属性无法更改…,所以?所以我建议OP的代码中发生的是:(1)User.getUserById
读取用户对象,例如从数据库读取(2)结果在传递到回调之前传递到object.freeze
。(3) OPs code调用“删除结果.密码”
,该操作失败,因为对象已冻结。这完全回答了OP的问题——“为什么删除在这里不起作用?”重新阅读:“我可以看到密码被修改了,为什么删除在这里不起作用?”
。结果对象不会被冻结(否则会将新值放入其属性)。我确实读过它,这就是为什么我要求OP澄清他是如何测试设置密码的-他在范围内有两个result
对象,因此他可能使用了错误的对象进行测试。他还可以尝试我在回答中建议的测试,轻松确认物体是否冻结。