Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象中删除属性在回调中失败_Javascript_Node.js_Express - Fatal编程技术网

Javascript 从对象中删除属性在回调中失败

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

我必须发送jwt,但我不想包含password属性。我确实删除了结果。密码,但我仍然看到密码在那里。我尝试了
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
对象,因此他可能使用了错误的对象进行测试。他还可以尝试我在回答中建议的测试,轻松确认物体是否冻结。