我尝试在 NodeJs 后端项目中使用 Filter() 函数,这是我的函数:
constructor(query, queryStr ){
this.query = query;
this.queryStr = queryStr; }
filter() {
const queryCopy = { ...this.queryStr };
// Removing some fields for category
const removeFields = ["keyword", "page", "limit"];
removeFields.forEach((key) => delete queryCopy[key]);
// Filter For Price and Rating
let queryStr = JSON.stringify(queryCopy);
queryStr = queryStr.replace(/\b(gt|gte|lt|lte)\b/g, (key) => `$${key}`);
this.query = this.query.find(JSON.parse(queryStr));
console.log(queryStr)
return this;
}
我正在使用邮递员发送带有 URL 的请求: http://localhost:4000/api/v1/products?price%5Blt%5D=2000&price%5Bgte%5D=1200
虽然我的数据库中有价格=1200的产品,但它没有发送任何产品。另一个问题是当我记录我的 (queryStr) 时,它看起来像这样: {"价格[$lt]":"2000","价格[$gte]":"1200"}
我的期望是: {"价格":{[$lt]":"2000","[$gte]":"1200"}}
我认为这是我问题的主要原因,请帮助我
const a = {'price[lt]': 2000, 'price[gte]': 1200, 'other': 'parameters'};
console.log(a); // { 'price[lt]': 2000, 'price[gte]': 1200 }
let finalObject = {};
for (const i of Object.keys(a)) {
const key = i.match(/(price|amount)/)?.shift(); // modify your key params here ex: price, amount etc..
const expr = i.match(/\b(gt|gte|lt|lte)\b/)?.shift();
if (key && expr) {
if (finalObject[key]) Object.assign(finalObject[key], { [`[$${expr}]`]: a[i] });
else Object.assign(finalObject, { [key]: { [`[$${expr}]`]: a[i] }});
} else Object.assign(finalObject, { [i]: a[i] });
}
console.log('finalObject...', finalObject); // {"price":{"[$lt]":2000,"[$gte]":1200},'other':'parameters'}