问题描述
我想向我的Strapi端点传递一个附加参数geodistance
。控制器应使用此参数先运行计算,然后再查询包含某些经度/纬度值的记录。
示例:假设我的集合类型realestate
包含字段cityName
,longitude
和latitude
,因此我的请求/路径如下所示:>
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
...
如果对此有其他解决方案,我很高兴得知。