我们应该在前端还是后端构建 Mongoose 查询?

Should we build Mongoose queries on the frontend or backend?

我们可以使用 $lte$gt$ne 等选项使用 Mongoose 构建复杂查询...但我想知道 where/how 我们应该构建那些查询?

如果我的前端有一个允许输入日期范围的表单,我可以发送一个如下所示的请求正文:

{
  date: {
    $gt: "01/01/2021",
    $lte: "31/01/2021"
  }
}

但这是好的做法吗?如果不是,我应该以什么格式发送它以及如何将它转换为 Mongoose 查询?

假设你在请求正文中发送它,那么这不是你应该做的,这可能会暴露一个安全漏洞,因为你的攻击者可以自己编写查询并检索机密信息您的后端将 运行 可能用于公开敏感信息的任何查询。

数据库是后端应该处理的东西,而不是前端,不要让前端写查询。相反,只需像这样发送数据:

{
  "startDate": "1/1/1",
  "endDate": "2/2/2" 
}

然后在你的后端你可以从请求体中获取值并自己做

{
  date: {
    $gt: startDate,
    $lte: endDate
  }
}

这个我也想过。目前,我们的 API 中有一些路由接受 req.body 中的自定义查询,就像您的示例一样,但是它们只是“查找”路由,并且受我们的身份验证中间件保护。这使得在前端通过各种属性查找文档变得容易 VS 为每个参数构建一个路由。

不确定这是否是最佳做法,但如果我们对我们的身份验证系统没有信心,那么人们无论如何都可以读取我们的所有数据,所以我不确定允许他们发送自定义查询会怎样做更糟?