問題があり、なぜ問題を解決できないのかよくわかりません。
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 でチェックすると (一致が見つかった)、返されたオブジェクトにはまだ削除されたプロパティが含まれています...どこが間違っているのでしょうか?