2016-04-09 10 views
2

私はnode.jsで新しくなった私は1つの残りのAPIを書いており、不要な情報を公開せずにデータを公開する正しい方法が何であるかを知りたい。サーバーからクライアントへデータを公開する方法

私の例では、「タグ」スキーマがあります。そして、私はクライアントにmongooseフィールドを公開したくありません。私のコード:

apiRoutes.get('/tag', passport.authenticate('jwt', { 
    session: false 
}), (req, res) => { 
    Tag.find({}, (err, tags) => { 
     return res.json(tags); 
    }); 
}); 

しかし、クライアントに、私は「_id」と「__v」を公開したくない:

{ 
     "_id": "57083a5e725f3cf0242a2916", 
     "tagName": "Test", 
     "en_us": "Testing", 
     "__v": 0, 
     "lastUpdated": "2016-04-08T23:10:22.759Z" 
    } 

のみ関連フィールドをマッピングする正しい方法は何ですか?

答えて

2

あなたは常にmongoose仮想を使用できます。クエリを作成するとき、ちょうどあなたが作成した仮想使用し、その後

Tag 
    .virtual('public') 
    .get(function() { 
    return { 
     tagName: this.tagName, 
     en_us: this.en_us, 
     lastUpdated: this.lastUpdated 
    }; 
    }); 

:ここでは一例である:あなたのモデルで

、あなたはこのようなものを使用することができます

Tag.find({}, (err, tags) => { 
    res.json(tags.map(tag => tag.public)); 
}); 
1

Schema transform toJSONを使用できます。

Tag.find({}, 'tagName en-us', (err, tags) => { 
    return res.json(tags); 
}); 

チェックmongoose documenation:ここにブログの記事があるあなたはfind方法でスペースで区切って必要なフィールドを宣言することができますignore certain fields from mongoose schema when return object to client

TagSchema.set('toJSON', { 
    transform: function(doc, ret, options) { 
    delete ret._id; 
    delete ret.__v; 
    return ret; 
    } 
}); 
1

詳細にそれを説明しています。

関連する問題