LoopBack3.0最佳实践(二)——快速构建
本文的内容为通过Loopback的脚手架工具快速构建一个hello world应用程序,并初步了解Model、数据源等核心概念。当然,快速上手LoopBack,官方的文档是最权威的最丰富的,英文基础好的朋友可以出门左转搭乘官方的公交车:
不想看英文的懒人朋友请留步,我们继续,本文的可读性更好,而且代码可以到Github下载。
1. 安装CLI
LoopBack的快速打开方式为安装命令行脚手架工具LoopBack CLI。在安装Node.js之后,有两种安装CLI的方法:
1 | 1. npm install -g loopback-cli (仅安装LoopBack CLI,交互命令为`lb`) |
这两种方式安装的LoopBack CLI,具体的交互命令基本相同,会有一些微小的差别。本文仅以介绍LoopBack为目的,所以将采用loopback-cli
作为示例。关于LoopBack和API Connect之间的关系可参见本系列的第一篇文章《初识LoopBack》
2. 创建hello world应用
仅需在命令行键入lb
这个命令,就可以按照交互式的提示去创建一个LoopBack应用。我们用loopback-hello-world作为工程的名字:
1 | $ lb |
在选择工程类型的时候,有4种选项
1 | What kind of application do you have in mind? (Use arrow keys) |
- empty-server 只包含基本的LoopBack脚手架代码
- api-server 在empty-server的基础上,增加了用户认证的一些配置
- hello-world 在api-server基础上,增加了一个Message模型,用于演示Model的作用
- notes 在api-server基础上,增加了一个Note模型,与hello-world的区别在于多了一些默认的REST API
这里我们选择hello-world,回车之后CLI会创建下面这些基本的文件,并且自动安装了所有package.json中的依赖包:
1 | . |
然后启动应用程序
1 | $ node . |
访问localhost:3000根路径,返回的是一行关于应用程序运行状态的信息,工程里并没有定义前端页面。
1 | {"started":"2017-10-04T06:33:55.674Z","uptime":5.538} |
访问localhost:3000/explorer则是一个Swagger页面,LoopBack称之为Explorer
直接在页面上操作,访问后端预定义好的REST API,给输入参数赋值后,点击try it out
可返回结果
3. 解构hello world工程
首先来看一下loopback-hello-world的工程目录结构:
1 | . |
工程里的代码和配置文件主要围绕着模型(Model)、数据源(Datasource)、中间件(Middleware)、组件(Component)这些概念来定义,我们来认识一下Looback的“四大金刚“:
- Model
在Loopback的世界里,一个Model不仅仅是Property的集合,还可以提供REST API Endpoint方法,并且集成ORM功能。开发者仅需要定义Property和配置参数,Loopback会自动集成API和数据持久化方法。一个Model由模型配置文件
(xxx.json)和模型定义文件
(xxx.js)组成。 - Datasource
Loopback里的Datasource,不仅仅可以是Mysql、Orcle等数据库,也可以是Web Service,还可以是MQ、RPC、Email等服务。Model和Datasource绑定,可以将数据持久化到任何地方。 - Middleware
由于Loopback基于Express完成http路由,其中间件的概念与Express Middleware的概念一致,是一个在Http请求的响应周期中执行的JavaScript函数,在API Endpoint方法之前或之后调用。类似于Java中的拦截器(interceptor)。 - Component
组件是Loopback提供的用于与第三方服务集成的插件机制,目前支持的组件有消息推送(Push notifications)、云存储(Storage component)、第三方认证(Third-party login)、Swagger等。这些插件都是独立的Nodejs Module,需要安装后才能被应用程序调用。
4. 添加Model
定义一个Model仅仅需要在命令行键入lb model
,然后跟随其交互指令:
1 | ? Enter the model name: |
然后定义Model的属性
1 | Enter an empty property name when done. |
我们在工程中添加一个新的Model,咖啡店 - CoffeeShop,包含name和city两个字段
定义完之后,我们可以看到代码有了如下的变化
- 修改了server/model-config.json
1
2
3
4"CoffeeShop": {
"dataSource": "db",
"public": true
} - 新增了common/models/coffee-shop.js和common/models/coffee-shop.json后面我们会看到所有新建的Model一般都会有这两个文件,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{
"name": "CoffeeShop",
"plural": "CoffeeShop",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string",
"required": true
},
"city": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}Model配置文件
(xxx.json)中可以配置一个Model的基本属性,Model定义文件
(xxx.js)中可以添加Model的自定义方法,该文件不是必需,即在没有自定义方法的情况下也可以不需要Model定义文件
。所以如果想手动创建一个Model,可以直接创建Model定义文件
和Model配置文件
,同时修改model-config.json即可。
好了,重启应用程序,我们可以看到Loopback自动为我们集成了各种增删改查的REST方法,目前数据只能持久化到内存。
5. 添加数据源
命令行键入lb datasource
,跟随其交互命令:
1 | ? Enter the datasource name: |
这里我们可以用Loopback官方提供的demo数据库作为示例
1 | ? Enter the datasource name: mysql |
定义完之后的代码变化:
- 修改了package.json。添加对loopback-connector-mysql的依赖,并自动安装。
1
"loopback-connector-mysql": "^2.4.1",
- 修改了server/datasources.json。添加了对mysql数据源的配置。在model-config.js中,将我们的CoffeShop的数据源修改为新增的mysql
1
2
3
4
5
6
7
8
9
10"mysql": {
"host": "demo.strongloop.com",
"port": 3306,
"url": "",
"database": "getting_started",
"password": "L00pBack",
"name": "mysql",
"user": "demo",
"connector": "mysql"
}然后即可重启应用程序。如果可以正常连接数据源,我们可以查询到数据库的CoffeeShop数据,其他的API大家可以自己去体验。1
2
3
4"CoffeeShop": {
"dataSource": "mysql",
"public": true
}
ok,到这里我们已经成功地构建了一个LoopBack的应用,区区几行代码,就让我们成功地实现了一个REST服务,从API到数据库一条龙。更多关于Model的玩法,欢迎访问本系列的下一篇文章《面向Model编程》