単純なRESTAPIがあり、特定のエンドポイントにフィルタリングを実装したいと思います。
次のようなエンドポイントがあると想像してください。
localhost:5000/api/items?color="red"
次のようなリクエストを処理します。
const items = await Items.find({color: req.query.color})
これcolor
は、パラメーターが存在する場合に機能します。ただし、color
パラメータは項目のためのクエリ検索を省略しているところcolor
ですundefined
。これは私が必要とする振る舞いではありません。
私の場合、存在しない場合は無視される複数のフィルターパラメーターを追加したいと思います。ケースごとに個別のクエリを作成する必要がありますか、それともフィールドcolor
がnullまたは未定義の場合にフィールド(この場合)を検索しないようにMongooseに指示するオプションはありますか?
'破壊的代入'を使用して、req.queryの変数を解凍できます。
const { color } = req.query;
if(color) {
const items = await Items.find({ color })
}
複数のフィルターがある場合は、上記の変数を使用できます。たとえばcolor
、type
パラメータがあります。これにより、findメソッドに渡すオブジェクトを作成できます。
const { color, type } = req.query;
let query = {};
if(color) {
query.color = color;
}
if(type) {
query.type = type;
}
const items = await Items.find(query);
場合color
またはtype
元のクエリではないが、彼らはされ未定義またはfalsyので、そのパラメータのif文をスキップします。それがうまくいくことを願っています!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加