2017-04-23 137 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