我有一个问题,我不太确定为什么我不能解决我的问题。
我有一个使用 AngularJS、Node.JS 和 MongoDB (Mongoose) 构建的 SPA。现在在客户端我有一个表格来注册一个新用户。该表单有一个文本输入,该输入具有与其onblur
事件相关联的功能(或者ng-blur
准确地说)。Ajax/$http
该函数在提交表单之前向后端发送调用以检查用户名是否唯一。一切正常,这是我到目前为止的代码(请注意,我已经稍微修改了这个问题的代码)......
这是文本框,
<input type="text" name="displayName" id="displayName" ng-model="user.displayName" ng-blur="checkUserName(user)" />
这是我控制器中的模糊功能
this.userNameCheck = function(user){
return $http({method: 'GET', url: '/api/users/displayName/' + user.displayName})
.then(function(response) {
if(response.data.length > 0){
user.userWarning = userWarning; // userWarning is a string/ var that is passed to the form
}
}, function(response) {
console.log(response);
});
};
这是我的节点/猫鼬代码,它包含在不同的项目中:
exports.displayName = function (req, res, next, displayName) {
User.find({displayName : displayName}).limit(1).exec(function (err, results) {
if (err) return next(err);
if (!results) return next(new Error('No user found'));
res.jsonp(results || null);
});
};
这一切都很棒,但是当我在控制台中检查时,我可以看到当我们匹配时,返回的结果对象包含哈希密码、盐等所有内容......我想防止这些在我的对象中返回. 所以我修改了我的后端代码:
exports.displayName = function (req, res, next, displayName) {
User.find({displayName : displayName}).limit(1).exec(function (err, results) {
if (err) return next(err);
if (!results) return next(new Error('No user found'));
// new code
if(results.length !== 0){
var returnObj = results[0];
delete returnObj.hashed_password;
delete returnObj.salt;
delete returnObj._id;
res.jsonp([returnObj] || null)
}else{
res.jsonp(results || null);
}
});
};
现在,当在 Firebug 中检查成功调用返回的内容(已找到匹配项)时,返回的对象仍然包含已删除的属性......我哪里出错了?