2017-04-23 102 views
1

我一直在寻找一些最近与PostgreSQL一起使用的Node ORM,并且希望在前端公开某种类型的灵活过滤。在API上暴露Sequelize过滤机制

我非常喜欢Sequelize的where/include过滤器提供的灵活性(例如,基于一些N关系深度的过滤模型)。

过滤机制是否安全在所有暴露给任何前端API?我还没有与它太多的经验,所以我“不能确定是什么类型的字段可以通过对过滤器的查询进行传递。

否则,对于更复杂的查询可能我喜欢的东西Knex去代替。

回答

0

一般来说,如果你需要询问是否可以安全地暴露where/include参数直接传递给你的前端,我建议你不应该这样做,如果你不知道它会如何表现,将所有的用户和密码散列泄漏到世界上

所以你会更好地通过验证传入的过滤参数来覆盖,并且只有在将它们传递给查询之后才可以使用,例如可以使用json模式来验证传入参数。

例如在objection.js ORM中,您可以通过某种方式处理此事,您可以在代码中为查询提供特定模式的数据用户可以包括哪些数据以进行响应,然后传入用户输入自动减少到该子集当有人向请求的行请求附加关系时)。

var houseWithPossiblePetsAndOwner = await House.query() 
    .allowEager('[pets, owner]') 
    .eager(eagerParamDirectlyFromEndUser) 
    .where('id', id); 

你可以扩展你的首选ORM支持那种额外的方法,它允许你申报哪些参数可以传递给它从用户输入查询。

+0

谢谢,是的,我现在已经在objection.js,这是完美的。我只被诱惑,因为sequelize(开箱即用)允许你使用JSON DSL做一些非常强大的查询 - 这需要一个体面大小的工作来反对复制。我会努力扩展异议过滤,而不是切换。 – J3Y