#geolocation #filtering #optional-parameters #strapi #bounding-box
#геолокация #фильтрация #необязательно-параметры #strapi #ограничивающий прямоугольник
Вопрос:
Я хочу передать дополнительный параметр geoDistance
моей конечной точке Strapi. Этот параметр должен использоваться контроллером для первого запуска вычисления, а затем запрашивать те записи, которые содержат определенные значения долготы / широты.
Пример: предположим, что мой тип коллекции realestate
содержит поля cityName
, longitude
и latitude
поэтому мой запрос / путь будет выглядеть примерно так:
GET /realestate?cityName=Berlinamp;geoDistance=5
Если я это сделаю, я получу сообщение об ошибке (если поле не отображается в моем определении модели):
{
"statusCode": 400,
"error": "Bad Request",
"message": "Your filters contain a field 'geodistance' that doesn't appear on your model definition nor it's relations"
}
Но я не хочу, чтобы это было в моем определении модели, потому что его следует использовать только временно перед выполнением фактического запроса (ограничивающего прямоугольника), например, что-то вроде этого:
if (ctx.query.geodistance) {
const geodistance = ctx.query.geodistance
const { longitude, latitude } = getCityDegrees(ctx.query.cityName)
// use geodistance in combination with lon, lat, etc...
}
Итак, вопрос в том, есть ли способ передать параметры без определения модели? Потому что сам параметр не должен отображаться внутри базы данных.
Ответ №1:
Я решил проблему, передав значение не через URL-запрос, а вместо этого через динамический параметр маршрута. Поэтому я определил новый объект routes следующим образом:
{
"method": "GET",
"path": "/realestate/distance/:distance",
"handler": "Realestate.find",
"config": {
"policies": []
}
А затем использовал его следующим const distance = ctx.params.distance
образом…
Если есть другое решение для этого, я рад услышать об этом.
Комментарии:
1. Общий вопрос: когда дело доходит до фактического вычисления расстояния, используете ли вы необработанный запрос, и если да, работают ли функции стандартной модели Strapi?