Это действительно странно, и я не могу понять, что я делаю неправильно. У меня есть флажок, который, когда установлен, устанавливает searchByName
параметр в true
в некотором компоненте React. Затем я использую маршрут от axios
до .get
, который должен искать и возвращать список пользователей. Если searchByName
равно true
, то MongoDB запрашивается по имени, а когда оно false
, оно запрашивает с использованием некоторых других параметров.
Проблема в том, что, когда я поддерживаю searchByName
в маршруте, я правильно вижу его значение (истинное или ложное), однако мое условие, которое проверяет, является ли оно истинным или ложным, не срабатывает, и Я всегда получаю результаты по делу true
. Я добавил console.log("Im name")
и console.log("Im city")
, чтобы увидеть, срабатывает ли код, но это всегда name
, даже если searchByName
ложно.
Не могли бы вы помочь выяснить это?
// @route GET api/report/:search/:searchByName
// @desc Get users
// @access Private
router.get("/:search/:searchByName", auth, async (req, res) => {
if (req.params.searchByName) {
console.log("im name");
try {
const query = req.params.search;
const reports = await Report.find({
name: { $regex: query },
isPublic: true
})
.select([
"name",
"status",
"startDate",
"country",
"zipcode",
"city",
"address"
])
.populate("users", [
"name",
"status",
"startDate",
"country",
"zipcode",
"city",
"address"
]);
res.json(reports);
} catch (err) {
console.error(err.message);
res.json(err);
res.status(500).send("Server Error");
}
} else if (!req.params.searchByName) {
console.log("im city");
try {
const query = req.params.search;
const reports = await Report.find({
$or: [{ city: { $regex: query } }, { zipcode: { $regex: query } }]
})
.select([
"status",
"startDate",
"country",
"zipcode",
"city",
"address"
])
.populate("users", [
"status",
"startDate",
"country",
"zipcode",
"city",
"address"
]);
res.json(reports);
} catch (err) {
console.error(err.message);
res.json(err);
res.status(500).send("Server Error");
}
}
});