Я пытаюсь сделать несколько запросов к конечной точке фильтра. Скажем, конечная точка
router.get('/filter', caseController.getCasesByFilteredRecord);
Я хочу, чтобы пользователь мог выполнять несколько запросов во внешнем интерфейсе. На основе документации Sequelize я придумал приведенный ниже код. Но когда я его тестировал, он использовал AND для привязки всего запроса вместо отображения результата для выбранного запроса. См. Ниже мой код:
ИЗМЕНЕНО НА ОСНОВЕ ПРЕДЛОЖЕНИЯ @MOLDA
exports.getCasesByFilteredRecord = async (req, res) => {
try {
var where = [];
// iterate over the params
for (let q in req.query) {
var obj = {};
obj[q] = { [Op.eq]: req.query[q] };
// if q is discoveryMethod then the obj is { discoveryMethod: { [Op.eq]: req.query.discoveryMethod } }
where.push(obj);
}
const filteredResult = await Case.findAll({
attributes: { exclude: ['id', 'countryId', 'caseFullname', 'casePhone', 'createdAt', 'caseCommunityName', 'deletedAt'] },
where: {
[Op.or]: [
{
discoveryMethod: {
[Op.eq]: req.query.discoveryMethod
}
},
{
caseAge: {
[Op.eq]: req.query.caseAge
}
},
{
caseGender: {
[Op.eq]: req.query.caseGender
}
},
{
caseComorbidity: {
[Op.eq]: req.query.caseComorbidity
}
},
{
testResult: {
[Op.eq]: req.query.testResult
}
},
{
priority: {
[Op.eq]: req.query.priority
}
},
{
caseStatus: {
[Op.eq]: req.query.caseStatus
}
},
{
requireBedAdmission: {
[Op.eq]: req.query.requireBedAdmidsion
}
},
{
requireICUBed: {
[Op.eq]: req.query.requireICUBed
}
},
{
requireVentilator: {
[Op.eq]: req.query.requireVentilator
}
}
]
},
order: [
['createdAt', 'DESC']
],
limit: 10
});
if (filteredResult.length === 0) {
return res.json({
message: 'There are no case records for this query. Please unselect some items.'
})
};
res.status(200);
res.json({
message: 'Case query records retrieved.',
data: filteredResult
});
} catch (err) {
console.log(err);
res.status(500)
.json({
message: "There is an error retrieving case query records!",
err
});
};
};
Предполагается, что мой запрос похож на http://localhost:8004/api/v1/cases/filter?caseComorbidity=HBP&testResult=positive&caseGender=Male
Sequelise будет выбирать из Случай, когда эти запросы представляют собой введенные значения И объединяют все нулевые значения для других. Но я хочу, чтобы он только выбирал, где я ввел значения в запросе, и опускал нулевые запросы.