2015-12-20 43 views
0

JSData是否替換或補充Sequelize.js?在使用JSData和Sequelize時保持DRY

我想了解這兩個庫如何一起玩,如果他們應該。

從我的閱讀看來,JSData主要處理訪問數據,而Sequelize.js將創建和修改scema,並且還提供訪問對象。

如果我使用Sequelize.js,在服務器端使用JSData有什麼意義嗎?

我想在服務器端使用Sequelize,爲這些對象實現一些REST API,並在客戶端使用JSData + JSDATA-http訪問REST API,但感覺必須定義對象兩次...一次Sequelize和一次JSData - 有沒有什麼魔法可以防止需要這樣做兩次?還是我以錯誤的方式思考這一切?

回答

2

是否JSData替換或補充Sequelize.js?我想了解這兩個圖書館如何一起玩,以及他們應該如何玩。

在服務器上,js-data + js-data-sql將取代Sequelize,類似於js-data + js-data-mongodb將如何取代Mongoose。 js-data-sql在底層使用Knex.js,您可以將它用於架構遷移和Knex支持的其他任何內容。對於模式驗證,您可以通過validate生命週期掛鉤(和其他位置)將您最喜歡的驗證庫插入js-data。

如果我使用Sequelize.js,在服務器端使用JSData有什麼意義嗎?

沒有

我想用Sequelize在服務器端,實現一些REST API對這些對象和使用JSData + JSDATA-HTTP在客戶端訪問REST API,但它覺得我必須兩次定義對象......一次爲Sequelize,一次爲JSData定義 - 是否有任何魔法可以防止需要這樣做兩次?

我實際上有經驗在客戶端使用js-data + js-data-http,在服務器上使用Sequelize。你可以這樣做,但是,是的,你必須定義每個模型/資源兩次,一次使用Sequelize API,一次使用js-data API。通過將通用邏輯提取到「基本」模型中,可以減少重複數據,這可以由服務器和客戶端使用。但是,如果您在服務器上使用js-data,則可以在客戶端中直接編寫複雜的查詢,而無需將它們轉換爲服務器的ORM理解的內容。

還是我想着所有這些以錯誤的方式?

不,你只是想了解你的選擇。作爲js-data的作者,我當然會主張js-data + js-data-sql,但js-data + js-data-sql落後於Sequelize的主要領域是Sequelize對原生支持belongsToMany(n:m)關係和對sql數據類型的內置理解(驗證由js-data自動完成)。

+0

感謝您的回覆,並感謝您編寫此工具。 我想指出,通過它沒有「彈出」js-data實際上管理像創建表等東西的文檔。你能否指點我一個例子來說明這是如何工作的?並且在代碼生命週期中是否會發生?如果你可以詳細說明「sql數據類型」問題,它可能會有所幫助。至於n:m可能可以使用n:1 + 1:m的關係來解決這個問題.... – epeleg

+1

js-data不會自動創建表。只有在使用sql適配器時,創建表纔有意義。 Mongo自動爲您創建集合,其他適配器沒有表格的概念。使用sql適配器創建表的示例:https://github.com/js-data/js-data-examples/blob/master/server/sql/app/app.js#L197它只發生在你實現它的地方。 n:1 + 1:m是n:m是如何工作的,只是Sequelize理解這一點而隱藏了中間表。用js-data你必須處理中間表。 – jdobry

+0

謝謝,所以看起來我會恢復到在服務器端使用sequelize和在客戶端使用js-data的想法... – epeleg