删除运算符不在Javascript中工作
这是一个函数,用于在JSON对象返回到客户端之前从该对象中删除敏感信息。传递到函数中的数据可能是JSON对象或JSON对象数组。为什么这个功能不起作用 我知道这个问题还有其他的解决办法,但这让我的大脑很烦 我在这个函数中记录了大量的信息,即使JavaScript是异步的,函数也是按照它们应该的顺序运行的——递归在命中最终返回语句之前完成 现在的问题是,尽管一切似乎都在运行,并且删除运算符不在Javascript中工作,javascript,json,node.js,mongoose,ecmascript-6,Javascript,Json,Node.js,Mongoose,Ecmascript 6,这是一个函数,用于在JSON对象返回到客户端之前从该对象中删除敏感信息。传递到函数中的数据可能是JSON对象或JSON对象数组。为什么这个功能不起作用 我知道这个问题还有其他的解决办法,但这让我的大脑很烦 我在这个函数中记录了大量的信息,即使JavaScript是异步的,函数也是按照它们应该的顺序运行的——递归在命中最终返回语句之前完成 现在的问题是,尽管一切似乎都在运行,并且delete操作符正在返回true,但当函数最终返回时,被删除的属性仍然存在 示例从MongoDB获取的数据: [
delete
操作符正在返回true
,但当函数最终返回时,被删除的属性仍然存在
示例从MongoDB获取的数据
:
[
{
'id': '1',
'name': 'John',
'password': 'test123',
'emailAddress': 'john@example.com',
'emailAddressVerificationCode': 'A897D'
},
{
'id': '2',
'name': 'Andrew',
'password': 'test123',
'emailAddress': 'andrew@example.com',
'emailAddressVerificationCode': '90H8D'
},
{
'id': '3',
'name': 'Matthew',
'password': 'test123',
'emailAddress': 'matthew@example.com',
'emailAddressVerificationCode': '56C7C'
}
]
如有任何想法,将不胜感激
UserService.cleanJSON = (data) => {
if (Array.isArray(data)) {
for (let i = 0; i < data.length; i++){
data[i] = UserService.cleanJSON(data[i]);
}
} else {
if (data.password) delete data.password;
if (data.emailAddressVerficationCode) delete data.emailAddressVerficationCode;
if (data.mobileNumberVerificationCode) delete data.mobileNumberVerificationCode;
if (data.accountType) delete data.accountType;
}
return data;
};
UserService.cleanJSON=(数据)=>{
if(Array.isArray(数据)){
for(设i=0;i
删除JSON中最后一个花括号后的逗号。您可能正在使用Mongoose或任何其他ODM,对吗?
如果是这样,您必须知道,除非调用方法.lean()
(),否则无法更改结果
除非分离结果,否则Mongoose会保护模型不受任何修改。您能否提供一个初始化
数据的示例,该示例不起作用?此外,可能与您的问题无关,但是可能不需要从函数返回数据
,因为它正在编辑通过引用传入的原始对象。此函数将按预期工作。问题出在别的地方。这行是打字错误吗if(data.emailAddressVerficationCode)删除data.emailAddressVerficationCode代码>验证,而不是验证。除此之外,它在Chrome控制台中对我很好。当我运行代码时,它会删除password
属性,因此@MezoIstvan是正确的。这是一个问题中的输入错误。在应用程序中,数据是从MongoDB获取的,不会有这些错误。这很有效!我从来不知道猫鼬的事。非常感谢。感谢@johnyhk也给了我这个答案。事实上,如果你确定你不会更改查询结果的模型,你应该始终使用.lean();您将花费更少的内存并提高性能,因为对象将更轻。另一个技巧是使用投影,这样你就不会从数据库中得到任何你不打算使用的值。从现在开始我会这样做。有没有一种方法可以使用lean而不必使用回调的.exec()
语法,而是我的示例中使用的回调语法?