Node.js の JavaScript で単純なサーバーを作成しています。これにより、(とりわけ) ユーザーは自分のアカウント (基本的な CRUD 機能など) を管理できます。サーバーは MongoDB インスタンスに接続され、Mongoose を使用して接続とデータを管理します。
Mongoose のモデルには と呼ばれるメソッドがありfindOneAndUpdate()
、これはまさにあなたが思っていることを行います: 返された最初のドキュメントをデータベースに照会し、渡されたパラメーターに基づいてそのドキュメントを更新します。次に、更新された新しいドキュメントをユーザーに返します。意図したとおりに機能し、問題はありません。
ただし、すべてのユーザー データが返されることは望ましくありません。_id
具体的には、 andpassword
フィールドを省略したいと思います。MongoDB によって返されるオブジェクトは基本的な JavaScript オブジェクトであるため、 を呼び出すことでこれらの属性を削除できると想定しましたdelete object.attribute
。残念ながら、何らかの理由で機能していません。
ユーザー情報を更新するコードは次のとおりです。
case "update":
User.findOneAndUpdate({"token": header.token}, body, function(err, user) {
if (err) {
return callback(err);
} else {
delete user["_id"];
delete user["password"];
return callback(null, new SuccessEnvelope(user));
}
});
break;
わかりやすくするために、Envelope
(この場合はSuccessEnvelope
) は、クライアントとサーバーが通信を容易にするために必要な情報のバンドルです。TCP パケットに似ています。とにかく脱線…
たとえば、ユーザー名を「joe_bob」から「jim_bob」に更新したい場合、これをサーバーに送信します。
{"header": "type": "user", "method": "update", "token": "IM_A_TOKEN_GAIS_SRSLY"}, "body": {"username": "jim_bob"}}
ユーザーのユーザー名が正常に更新されると、次のような結果が得られます。
{"header": {"type": "success"}, "body": {"__v": 0, "_id":"SOME_NUMERICAL_ID", "email": "joe_bob@email.com", "password": "SUPER_SECURE_PASSWORD_HASH_COME_AT_ME_NSA", "token": "IM_A_TOKEN_GAIS_SRSLY", "username": "jim_bob"}}
ご覧のとおり、_id
まだpassword
そこにあります。私は何を間違っていますか?どんな助けでも大歓迎です。
ありがとうございました!