2017-05-07 4 views
0

保存されたオブジェクトをリクエストレスポンスとして返すようにしようとしていますが、Model.save()関数によって返されたオブジェクト全体を、望ましくない情報、例えば_id__vが返されないようにしたいと思います。保存後に返されるプロパティを制限する方法は?

私の要求コードは次のようである:

function insertUser(req, res) { 
    const userName = req.Body.name; 

     User.save({ name : userName }) 
     .then(r => { 
      res.send(r); 
     }); 
} 

私にJSONを休閑返します:

{ 
    _id: 590f529976aa6142d91870b7, 
    name: 'blablabla' 
    __v: 4 
} 

私だけ{ name : 'blablabla' }を返すように設定できますか?

+2

なぜ 'res.send({name:r.name})'をしないのですか? – Mikey

+0

神!なぜ私はこの方法を考えなかったのですか?それが私の仕事です。しかし 'mongoose'で' name 'だけを返すように設定できますか?好奇心のためだけに – Lai32290

答えて

1

あなたは、このための方法を記述することができます。

は、ユーザーのスキーマに、このメソッドを追加します。 この方法であなたがクライアントに

userSchema.methods.getPublicFields = function() { 
    return { 
    name: this.name 
    }; 
}; 

を返すかを制御などに使用することができますこの

User.save({ name : userName }) 
    .then(r => { 
     res.send(r.getPublicFields); 
    }); 
+0

ありがとう、私はこの方法は私の場合には良いと思う – Lai32290

0
// transform for sending as json 
function omitPrivate(doc, obj) { 
    delete obj.__v; 
    delete obj.id; 
    return obj; 
} 

// schema options 
var options = { toJSON: { transform: omitPrivate } }; 

// schema 
var schema = new Schema({ 
    name: { type: String, required: true }, 
}, options); 
関連する問題