将可选参数传递给Strapi查询而不创建模型定义?

问题描述

我想向我的Strapi端点传递一个附加参数geodistance。控制器应使用此参数先运行计算,然后再查询包含某些经度/纬度值的记录。

示例:假设我的集合类型realestate包含字段cityNamelongitudelatitude,因此我的请求/路径如下所示:>

GET /realestate?cityName=Berlin&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...
}

所以问题是,是否有一种无需模型定义即可传递参数的方法?因为参数本身不应出现在数据库中。

解决方法

我通过不通过url查询而是通过动态route参数传递值来解决了问题。因此,我定义了一个新的路由对象,如下所示:

{
  "method": "GET","path": "/realestate/distance/:distance","handler": "Realestate.find","config": {
    "policies": []
}

然后像这样const distance = ctx.params.distance ...

如果对此有其他解决方案,我很高兴得知。