Important:
请先阅读此文, 然后根据 LoopBack初级教程 创建一个简单的Loopback应用。
Model inheritance
</figure>
数据模型
LoopBack 的核心就是数据模型。数据模型用于描述后端的数据源,如数据库或其他RSET, SOAP等后端服务。从使用者的角度来看,LoopBack的数据模型可以是一个JS对象或者是一组REST的API。
所有LoopBack的数据模型都自带了一组REST API用于CRUD操作。
所有的数据模型最终都继承自一个基础模型对象。这个基础模型对象具有让所有继承自它的数据模型具有添加 hooks 和 数据验证 的能力。数据模型间的继承关系如左图所示。当你将数据模型连接到一个持久层的数据源时,那么这个数据模型将成为一个具备CRUD操作的已连接模型。所有LoopBack的内建的数据模型同样继承自基础模型对象。
内建的数据模型
所有的LoopBack应用程序都会自带一组内建的数据模型,例如:User, Role 和 Application等。因此开发人员无需从头定义这些模型,而可以继承自这些内建的数据模型。
自定义数据模型
你也可以为你的应用创建自定义数据模型。 当然,你的自定义模型也完全可以扩展内建的数据模型,从而复用内建的 User, Application 等模型的功能。
数据模型关系(Model relations)
LoopBack 可以让你方便地使用BelongsTo, HasMany 和 HasAndBelongsToMany 来表述数据模型间的关系。
数据模型的CRUD操作
当你将数据模型连接到一个持久层的数据源(例如数据库或外部的REST API)时,那么这个数据模型将成为一个已连接模型。已连接模型具备完整的继承自PersistedModel的CRUD操作能力。
操作 | REST | LoopBack model method (Node API)* |
对应的SQL操作 |
---|---|---|---|
Create | create()* |
INSERT | |
Read (Retrieve) | GET /modelName?filter=... | find()* |
SELECT |
Update (Modify) | updateAll()* |
UPDATE | |
Delete (Destroy) | DELETE /modelName/modelID | destroyAll()* |
DELETE |
*Methods listed are just prominent examples; other methods may provide similar functionality; for example, in addition to find()
, there are also findById()
, findOne()
, and findOrCreate()
.
业务逻辑(Application Logic)
你可以用以下三种方法为一个LoopBack应用添加业务逻辑
- 在数据模型中添加业务逻辑。在这个场景下,你可以 remote methods (即自定义的绑定到数据模型REST API上的方法), remote hooks (在调用模型的remote methods时被触发) 和 model hooks (在调用模型的CRUD操作时被触发) 上添加业务逻辑
- 在boot scripts上添加应用启动时的业务逻辑。
- 通过中间件为应用添加业务逻辑。类似于传统的Express中间件.
除了业务逻辑外,你还可以在数据被存入后端数据源前验证数据。
阶段型中间层 (Middleware phases)
当应用响应一个HTTP的REST请求时,中间层逻辑会被依次触发。因为LoopBack本身是基于Express的,所以LoopBack的中间件也类似于Express 中间件。不过,LoopBack的中间件引入的阶段 _(Phase)_的概念。通过将中间件定义在不同的阶段,开发人员可以更明确地定义中间件的触发顺序,从而避免在标准的Express中间件触发顺序的问题。
详情请参考定义中间件。