簡體   English   中英

節點js在發送之前從對象中刪除敏感數據

[英]Node js remove sensitive data from object before sending it

我想在發送到客戶端之前從數組中刪除一些敏感數據(以呈現所有用戶),但由於某種原因我實際上無法刪除它們! 我需要刪除一些用戶名、密碼、電子郵件等。 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 is not a function”。 再次感謝!

我會胡亂猜測您想完全刪除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...
  })
}

如果這些屬性是non-configurable ,則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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM