使用 StrongLoop 创建 Node.js MySQL 应用程序

 

这篇简短教程将展示使用 StrongLoop API 将来自 MySQL 数据库的数据与 Node.js 相集成的步骤。我们不要求掌握命令行以外的任何工具!完成本教程后,您将能够浏览生成的 API:

在这里,您能够使用 StrongLoop API Explorer 来 POST 数据,并在所选的数据库浏览器中检查结果。

开始之前

除了命令行之外,下面是一些必备工具:

  • 一个本地 Node.js 安装(参见 Node.js 下载,或者如果您更喜欢 Eclipse 环境,请参见 Nodeclipse 下载)
  • Node.js 可执行 npm,用于 Node.js 的包管理器

当然,您还需要一个 Bluemix 帐户。

在应用程序中使用 StrongLoop 之前,必须安装 StrongLoop 命令行工具。这些工具包括 slc、StrongLoop Process Manager 的命令 shell、strong-pm 和 LoopBack API 框架(包含 CLI 和 GUI)。要安装 StrongLoop 工具,请执行下面这条 npm 命令:

1

npm install -g strongloop

要验证 LoopBack 是否安装成功,可键入

1

slc -v

它应该显示了您的 StrongLoop 安装的版本。

创建一个骨架 LoopBack 应用程序

切换到您的开发目录。

1

cd <development_directory>

使用下面这条命令,创建一个名为“<alias>-loopback-example”的新应用程序(比如 amyla-loopback-example)。

1

slc loopback  <alias>-loopback-example

输入应用程序名称和安装目录,以便完成新 StrongLoop 项目的初始化。您现在已经有一个完整的 Node.js StrongLoop 应用程序。尝试运行您的应用程序并打开资源管理器页面。

1

2

cd <alias>-loopback-example

node server/server.js

如果发生类似“Cannot find module ‘loopback'”的错误,可运行 npm install 将所需的模块安装在 node_modules 目录中。单击 show/hide 链接显示您的新应用程序随带的 StrongLoop API:

安装 StrongLoop MySQL 连接器

接下来,我们将通过安装 LoopBack MySQL 连接器,向项目添加对 MySQL 数据库的支持。运行下面这条命令来安装 StrongLoop MySQL 连接器:

1

2

cd <alias>-loopback-example

npm install --save loopback-connector-mysql

配置数据源

现在我们已经添加了适当的数据库支持,您必须为数据源配置数据库连接。创建和配置一个名为“AccountDb”的新数据源。

1

slc loopback:datasource AccountDb

接受默认数据源名称。对于数据库类型,选择 MySQL。

创建一个 Node.js 应用程序和 MySQL 服务

现在我们已有一个在 localhost 上运行的有效的 StrongLoop 应用程序,我们将向应用程序添加一个 MySQL 连接,因此必须先创建一个想要连接到的 MySQL 实例。

如果已有一个想要使用的现有的 MySQL 数据库实例,您可以跳过这一步,使用您现有的服务的 MySQL 凭据。

我将在 Bluemix 中创建一个新 MySQL 数据库实例。如果没有 Bluemix 帐户,请注册一个免费的 Bluemix 试用版帐户。

  • 登录到 Bluemix 控制台:console.ng.bluemix.net。
  • 转到仪表板。
  • 在“Cloud Foundry Apps”下,单击“CREATE APP”。
  • 选择“WEB”。
  • 选择“SDK for Node.js”并单击“CONTINUE”。
  • 在“APP NAME”上输入应用程序名称“<alias>-loopback-example”并单击“FINISH”。

等待应用程序完成暂存。

  • 显示消息“Your app is running”后,单击 Overview 页面。
  • 单击“ADD A SERVICE OR API”,或者如果已创建了 MySQL 服务,单击“BIND A SERVICE OR API”。
  • 搜索“MySQL”或向下滚动到 Data & Analytics 服务。
  • 找到并选择“ClearDB MySQL Database”服务。
  • 接受默认设置或重命名该服务,按“USE”并确认“重新暂存”应用程序。

在创建服务后,在应用程序细节页面的左侧菜单中,转到“Environmental Variables”来查看 MySQL 服务凭据。或者转到 Overview 页,在 service 窗口中单击“Show Credentials”链接。

配置数据源

在应用程序目录中,打开 server/datasources.json 文件,添加您的数据源配置。复制 ClearDB MySQL 服务的凭据,或使用您自己的 MySQL 数据库凭据。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

{

"cleardb":[

{

"name":"MyClearDBMySQLDatabase-5y",

"label":"cleardb",

"plan":"spark",

"credentials":{

"jdbcUrl":"jdbc:mysql://<database_subdomain>.cleardb.net/<database>?user=<username>&password=<password>",

"uri":"mysql://<username>:<password>@<database_subdomain>.cleardb.net:3306/<database>?reconnect=true",

"name":"<database>",

"hostname":"<database_subdomain>.cleardb.net",

"port":"3306",

"username":"<username>",

"password":"<password>"

}

}

]

}

将凭据添加到 server/datasources.json 文件中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

"db":{

"name":"db",

"connector":"memory"

},

"AccountDb":{

"host":"<database_subdomain>.cleardb.net",

"port":3306,

"database":"<database>",

"password":"<password>",

"name":"AccountDb",

"user":"<username>",

"connector":"mysql"

}

}

创建数据模型

现在数据库已成功添加且配置了数据源,可以开始创建数据模型了。数据模型描述您应用程序中的模式或数据对象。每个数据对象将在 StrongLoop 中拥有自己的模型。完整的模式是模型的集合。在这里,我们为 Account 对象创建了一个数据模型。

1

slc loopback:model Account

按照提示配置该数据模型。对于模型的“base class”,使用“PersistedModel”并选择通过 REST API 公开该模型。添加模型属性如下:

1

2

3

4

5

Name:Account

Datasource:AccountDb

Base class:PersistedModel

Expose via REST:Yes

Custom plural form:Leave blank

对于数据模型上的属性,创建以下 3 个属性。

1

2

3

4

5

6

7

8

9

Property name: email

Property type: string

Required?Not required

Property name: createdAt

Property type: date

Required?Not required

Property name: lastModifiedAt

Property type: date

Required?Not required

我们现在已拥有数据库支持、数据源和数据模型。有了这些,我们就可以使用对象关系映射 (ORM),使用 StrongLoop 中的自动迁移工具,在 MySQL 中从数据模型生成数据库模式。

添加脚本来创建数据库中的模式

在您项目的根目录下的 ./server 文件夹中创建一个 bin 目录。

1

2

cd server

mkdir bin

在 server/bin 目录中,使用以下代码创建一个名为 automigrate.js 的文件。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

var app = require('../server');

 

var accounts = [

{

email:'foo@bar.com',

createdAt: new Date(),

lastModifiedAt: new Date()

},

{

email:'baz@qux.com',

createdAt: new Date(),

lastModifiedAt: new Date()

}

];

 

// this loads the accountDb configuration in ~/server/datasources.json

var dataSource = app.dataSources.AccountDb;

 

// this automigrates the Account model

dataSource.automigrate('Account', function(err) {

if (err) throw err;

 

// this loads the Account model from ~/common/models/Account.json

var Account = app.models.Account;

var count = accounts.length;

accounts.forEach(function(account) {

// insert new records into the Account table

Account.create(account, function(err, record) {

if (err) return console.log(err);

 

console.log('Record created:', record);

 

count--;

 

if (count === 0) {

console.log('done');

dataSource.disconnect();

}

});

});

});

创建 MySQL 模式

使用下面的命令运行 automigrate.js 脚本来在 MySQL 中创建一个表。

1

node server/bin/automigrate.js

运行上述脚本后,使用您最喜欢的 MySQL 客户端连接到您的 MySQL 数据库,您应看到表“account”包含 3 列:“email”、“createdAt”和“lastModifiedAt”。StrongLoop 还添加了一个“id”列。该表包含我们在脚本中创建的两个条目的数据,这两个条目是用来插入数据的:

运行该应用程序

1

2

3

slc run

node server/server.js

并浏览到 http://localhost:3000/explorer。StrongLoop 向您的应用程序添加了一系列兼容 Swagger 的 API,用于访问帐户资源:

我们还可以使用资源管理器页面来测试每个 API。单击“POST /Accounts”链接插入新数据。输入一条新 JSON 记录并按下“Try it out!”。

1

2

3

4

5

{

"email":"your@email.com",

"createdAt":"2015-09-01",

"lastModifiedAt":"2015-09-01"

}

您管理帐户的 StrongLoop 应用程序已完成!我们只需将它上传并部署到 Bluemix。

将 StrongLoop 应用程序部署到 Bluemix

  • 转到 Bluemix 仪表板并单击(您之前创建的)项目。
  • 单击 start coding。
  • 将 Bluemix 中的 Starter 应用程序的代码下载到您的 localhost,或者将 Git 存储库克隆到您的 localhost。
  • 将 Bluemix Starter 应用程序的 manifest.yml 文件复制到您的本地 StrongLoop 应用程序“<alias>-loopback-example”的根目录下。此文件包含 Cloud Foundry 用来将 Node.js 应用程序部署到 Bluemix 的信息。
  • 将隐藏的 .cfignore 文件复制到您的本地 StrongLoop 应用程序“<alias>-loopback-example”的根目录下。
  • 修改本地 StrongLoop 的“package.json”文件来添加“cfenv”依赖项,并更改启动脚本参数(参见下面的代码段)
  • 修改本地 StrongLoop 应用程序的 server/server.js 文件,使之包含 cfenv 要读取的主机和端口。Bluemix 以环境变量形式提供这些参数。在下面的代码段中,我修改了 StrongLoop 生成的 server.js 来反映这些更改。
  • 从您的本地 StrongLoop 应用程序的根目录删除 node_modules 文件夹。

package.json 的代码段:

1

2

3

4

5

6

7

8

"scripts":{

"start":"node server/server.js",

"pretest":"jshint ."

 },

"dependencies":{

..

"cfenv":"1.0.x"

..

server/server.js 的代码段:

1

2

3

4

5

6

7

var loopback = require('loopback');

var boot = require('loopback-boot');

// cfenv provides access to your Cloud Foundry environment

// for more info, see: https://www.npmjs.com/package/cfenv

var cfenv = require('cfenv');

// get the app environment from Cloud Foundry

var appEnv = cfenv.getAppEnv();

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

var app = module.exports = loopback();

app.start = function() {

// start the web server

return app.listen(appEnv.port, appEnv.bind, function() {

app.emit('started');

console.log('Web server listening at:%s', app.get('url'));

});

};

 

// Bootstrap the application, configure models, datasources and middleware.

// Sub-apps like REST API are mounted via boot scripts.

boot(app, __dirname, function(err) {

if (err) throw err;

// start the server if `$ node server.js`

if (require.main === module)

app.start();

});

连接并登录到 Bluemix:

1

2

cf api https://api.ng.bluemix.net

cf login -u <alias> -o <organization> -s <space>

使用 cf push 命令将您的应用程序推送到 Bluemix:

1

cf push <alias>-loopback-example

cf push 应在 Bluemix 上启动一次 git 提交、git 推送,构建和部署。检查您的 Bluemix 仪表板或 JazzHub “Build & Deploy” 页面,确认您的应用程序现在已成功在 Bluemix 上运行!

转载于:https://my.oschina.net/u/199525/blog/1545021

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值