我现在正试图使这条路线像这样。
localhost:3000/tasks?repeated=true&finished=false
正如您在“我想要重复
&已完成
是可选的。但我下面的代码需要这两者
router.get("/tasks", auth, async (req, res) => {
try {
// First way
const match = {};
if (req.query.finished) {
match.finished = req.query.finished === "true";
}
if (req.query.repeated) {
match.repeated = req.query.repeated === "true";
}
const task = await Task.find({
owner: req.user._id,
}).where({
repeated: match.repeated,
finished: match.finished,
});
res.send(task);
我认为您只需构建自己的查询条件,然后将其放入find
中的parameter中。
const query_condition = {
owner: req.user._id
}
if (req.query.finished) {
query_condition.finished = req.query.finished === "true";
}
if (req.query.repeated) {
query_condition.repeated = req.query.repeated === "true";
}
const task = await Task.find(query_condition)
res.send(task);
您可以尝试以下操作:
router.get("/tasks", auth, async (req, res) => {
try {
// First way
const match = {};
const task = await Task.find({
owner: req.user._id,
}).where({
repeated: req.query?.repeated,
finished: req.query?.finished,
});
res.send(task);
或者:
router.get("/tasks", auth, async (req, res) => {
try {
// First way
const match = {};
const task = await Task.find({
owner: req.user._id,
}).where({
...(req.query?.repeated && { repeated: true}),
...(req.query?.finished && {finished: true}),
});
res.send(task);