21

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そこにあります。私は何を間違っていますか?どんな助けでも大歓迎です。

ありがとうございました!

4

2 に答える 2