Если условие не срабатывает на маршруте Express - PullRequest
0 голосов
/ 06 апреля 2020

Это действительно странно, и я не могу понять, что я делаю неправильно. У меня есть флажок, который, когда установлен, устанавливает 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");
    }
  }
});

1 Ответ

1 голос
/ 06 апреля 2020

Ваш searchByName параметр является строкой. Используйте req.params.searchByName === 'true|false', чтобы проверить, является ли это true или false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...