节点js在发送之前从对象中删除敏感数据

时间:2015-12-22 14:50:37

标签: javascript node.js javascript-objects array-splice

我想在发送到客户端之前从数组中删除一些敏感数据(以呈现所有用户),但由于某种原因我实际上无法删除它们!我需要删除一些用户名,密码,电子邮件等。是否有splice()的东西?谢谢你的帮助!

app.get('/users', function(req, res){ Users.find{}, function(err, usersArray){
  for(var a = 0; a < usersArray.length; a++){
    usersArray[a].userData.username.splice(0, 1); // here's my error
    usersArray[a].userData.email.splice(0, 1); // end here
    usersArray[a].userData.password.splice(0, 1); // and also here
    ...
  }
  res.render('users.ejs', {
    // and the variables go here...
  })

}

顺便说一句,我得到的错误是“TypeError:undefined不是函数”。再次感谢!

1 个答案:

答案 0 :(得分:0)

我会猜测你想完全删除usernameemailpassword。如果是这样,您正在寻找delete,它会从对象中删除属性:

app.get('/users', function(req, res){ Users.find{}, function(err, usersArray){
  for(var a = 0; a < usersArray.length; a++){
    var userData = usersArray[a].userData;
    delete userData.username;
    delete userData.email;
    delete userData.password;
    ...
  }
  res.render('users.ejs', {
    // and the variables go here...
  })
}

如果这些属性不可配置,则delete无法移除它们,您必须将其值设置为undefined

app.get('/users', function(req, res){ Users.find{}, function(err, usersArray){
  for(var a = 0; a < usersArray.length; a++){
    var userData = usersArray[a].userData;
    userData.username = undefined;
    userData.email = undefined;
    userData.password = undefined;
    ...
  }
  res.render('users.ejs', {
    // and the variables go here...
  })
}

如果它们都是不可配置的不可写,则必须改为创建替换对象。

使用delete的实时示例:

var usersArray = [{
  userData: {
    name: "User 1", // Something to have left after we remove the others
    username: "user1",
    email: "user1@example.com",
    password: "pa$$word"
  }
}, {
  userData: {
    name: "User 2",
    username: "user2",
    email: "user2@example.com",
    password: "pa$$word"
  }
}, {
  userData: {
    name: "User 3",
    username: "user3",
    email: "user3@example.com",
    password: "pa$$word"
  }
}];
snippet.log("Before: " + JSON.stringify(usersArray, null, 2));
for (var a = 0; a < usersArray.length; a++) {
  var userData = usersArray[a].userData;
  delete userData.username;
  delete userData.email;
  delete userData.password;
}
snippet.log("After: " + JSON.stringify(usersArray, null, 2));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

使用undefined包含不可配置属性的实例:

function makeUserData(name, username, email, password) {
  var ud = {name: name};
  Object.defineProperty(ud, "username", {
    enumerable: true,
    configurable: false,
    writable: true,
    value: username
  });
  Object.defineProperty(ud, "email", {
    enumerable: true,
    configurable: false,
    writable: true,
    value: email
  });
  Object.defineProperty(ud, "password", {
    enumerable: true,
    configurable: false,
    writable: true,
    value: password
  });
  return ud;
}
var usersArray = [{
  userData: makeUserData("User 1", "user1", "user1@example.com", "pa$$word")
},{
  userData: makeUserData("User 2", "user2", "user2@example.com", "pa$$word")
},{
  userData: makeUserData("User 3", "user3", "user3@example.com", "pa$$word")
}];
snippet.log("Before: " + JSON.stringify(usersArray, null, 2));
for (var a = 0; a < usersArray.length; a++) {
  var userData = usersArray[a].userData;
  delete userData.username;
  delete userData.email;
  delete userData.password;
}
snippet.log("After delete: " + JSON.stringify(usersArray, null, 2));
for (var a = 0; a < usersArray.length; a++) {
  var userData = usersArray[a].userData;
  userData.username = undefined;
  userData.email = undefined;
  userData.password = undefined;
}
snippet.log("After assigning undefined: " + JSON.stringify(usersArray, null, 2));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

相关问题