Почему оператор switch работает только по умолчанию и игнорирует остальные условия? - PullRequest
1 голос
/ 04 июля 2019

Я пишу конечную точку, которая возвращает все данные из базы данных, если запрос не предоставлен, но возвращает только данные, которые удовлетворяют условию запроса, если запрос предоставлен

    try {
      const { origin, destination } = req.query;
      switch (req.query) {
        case { origin }: {
          const data = await Trips.tripModel().select('*', `WHERE origin='${origin}'`);
          if (!data[0]) return nullResponse(res, 'No trips available from here');
          return successResponse(res, 200, data);
        }

        case { destination }: {
          const data = await Trips.tripModel().select('*', `WHERE destination='${destination}'`);
          if (!data[0]) return nullResponse(res, 'No trips available to this destination');
          return successResponse(res, 200, data);
        }

        default: {
          const data = await Trips.tripModel().select('*');
          if (!data[0]) return nullResponse(res, 'No trips available');
          return successResponse(res, 200, data);
        }
      }
  }

Если запрос предоставляется почтальону, т. Е. /api/trips?origin=london, он должен возвращать только те данные, которые удовлетворяют условию origin = london, но вместо этого он возвращает все данные, которые являются условием по умолчанию.

1 Ответ

1 голос
/ 04 июля 2019

{ origin } создает новый объект с одним свойством.Это не строго равно req.query, значению для сравнения.

Вам нужны значения, которые сравнимы в switch выражении .В этом случае вы можете провести странное сравнение с false, предполагая, что значения имеют либо истинное значение, либо undefined.

 switch (false) {
    case !origin: {
      const data = await Trips.tripModel().select('*', `WHERE origin='${origin}'`);
      if (!data[0]) return nullResponse(res, 'No trips available from here');
      return successResponse(res, 200, data);
    }

    case !destination: {
      const data = await Trips.tripModel().select('*', `WHERE destination='${destination}'`);
      if (!data[0]) return nullResponse(res, 'No trips available to this destination');
      return successResponse(res, 200, data);
    }
}
...