我正在運行一個MongoDB,通過Mongoose訪問來存儲用戶記錄。我在服務器上也有下劃線。我有一個RESTful API和一個從數據庫返回一個集合(對象數組)的路由。我想將完整集合返回給客戶端,但是從每個對象中刪除密碼元素,以便不會發送到客戶端。在任何人說什麼之前,我將使用bcrypt在最終版本中使用salt並散列密碼:)underscore.js .keys和.omit不按預期工作
今天,我只在數據庫中有一個用戶'administrator'的條目。下面是我的路線代碼:
app.get('/users', function(req, res) {
User.find().sort({'userName': 'ascending'}).exec(function(err, data) {
_.each(data, function (element, index, list) {
console.log('userName=' + element.userName);
console.log('password=' + element.password);
delete element.password;
console.log('keys: ' + _.keys(element));
console.log('password=' + element.password);
console.log(_.omit(element, 'password'));
});
res.json(data);
});
});
我所得到的發送回瀏覽器:
[{"_id":"54058e6eb53dd60730295f59","modifiedOn":"2014-09-01T15:19:10.012Z",
"userName":"administrator","password":"stackoverflow","role":"administrator",
"__v":0,"createdBy":"54058e6eb53dd60730295f59","createdOn":"2014-09-01T15:19:10.004Z",
"previousLogins":[],"accountIsLocked":false,"loginAttempts":0}]
我們哪罰款,因爲res.json(data)
聲明就發送原始data
回瀏覽器 - 這不是問題。問題是delete
(以及如果我使用.omit
)似乎不適合我的收藏!正如你可以看到有很多的console.log
進行調試,這裏是獲取輸出:
userName=administrator
password=stackoverflow
keys: $__,isNew,errors,_maxListeners,_doc,_pres,_posts,save,_events
password=stackoverflow
{ _id: 54058e6eb53dd60730295f59,
modifiedOn: Mon Sep 01 2014 19:19:10 GMT+0400 (GST),
userName: 'administrator',
password: 'stackoverflow',
role: 'administrator',
__v: 0,
createdBy: 54058e6eb53dd60730295f59,
createdOn: Mon Sep 01 2014 19:19:10 GMT+0400 (GST),
previousLogins: [],
accountIsLocked: false,
loginAttempts: 0 }
的_.keys
輸出顯示鍵(?我從一個物體原型假設),我沒有看到,當我console.log(element)
但沒有可通過element.key
訪問的密鑰。
任何想法,爲什麼我看到這種行爲?
這真的很奇怪。請參閱'_.keys'不應該訪問對象原型的屬性。 'console.log(element .__ proto __。constructor)'顯示什麼? – raina77ow 2014-09-10 14:04:04
是的,我看起來也很奇怪! 'onsole.log(element .__ proto __。constructor)'輸出大量條目......這裏是一個pastebin鏈接:[link](http://pastebin.com/vUkFabHY) – 2014-09-10 14:58:53