内容


Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中

Bluemix 数据库服务简介

Comments

概述

学习如何在 Bluemix 上创建一个 Cloudant NoSQL 数据库,并将其添加到您的 Node.js Web 应用程序中。探索构建一个数据驱动、动态生成的网络商店,该商店会根据当前库存水平来改变外观。使用基于 Web 的 Cloudant 仪表板查看和维护您的 NoSQL 数据库。

本教程是 developerWorks 上的 “Bluemix 基础” 教程系列的一部分。

 

您将在本教程中完成的任务

第 1 步. 下载代码

第 2 步. 将应用程序部署到 Bluemix

第 3 步. 创建 Cloudant NoSQL DB 服务并将其绑定到应用程序

第 4 步. 检查代码结构

第 5 步. 使用 nano 将数据添加到 Cloudant NoSQL 数据库中

第 6 步. 探索数据驱动的动态网站生成

其他 Bluemix 服务

测验时间!

恭喜您, — 您已经完成了 Bluemix 基础知识的学习!

让我们开始吧。

在前一篇教程 “将大量服务添加到您的应用程序中” 中,您已经了解到,服务只是 Bluemix 或第三方合作伙伴托管的代码,它们可以给您部署的 Bluemix 应用程序增添价值。

服务给您的应用程序带来了强大的功能,比如数据库、移动应用程序支持、分析、遗留系统集成和安全管理。从某种意义上讲,它们就像是插件,您随时可以向应用程序添加和绑定服务。

在可用的 Bluemix 服务中,数据库服务是最常使用的。而 Cloudant NoSQL DB 服务是最流行的 Web 应用程序附加功能之一。

为经典的三层架构设计的大部分 Web 应用程序都在第三层需要一个数据库服务:

三层架构图
三层架构图

您的应用程序逻辑在无状态的应用程序层运行,而数据存储在数据库层。此架构使您只需增加应用程序实例的数量,就可以将应用程序扩展到越来越多的用户。

本教程将快速概述如何使用 Bluemix,将一个 Cloudant NoSQL DB 服务添加到您的 Bluemix 应用程序中。

本教程中的步骤图
本教程中的步骤图

您将创建 Cloudant 服务的一个实例,并将它绑定到您的 Web 应用程序。然后您将创建一个数据库,将一个包含应用程序数据的文档插入到该数据库中 — 从您的桌面远程插入。您将了解 Web 应用程序如何能够根据数据库中的数据来动态改变外观。最后,您将使用 Bluemix 上基于 Web 的 Cloudant 仪表板,用它作为访问您的数据的替代方式。

完成本教程所需的知识

完成本教程所需的软件

第 1 步. 下载代码

  1. 单击此按钮下载示例 Node.js 应用程序 nodedbtutorial.zip 的代码:
  2. 将 nodedbtutorial.zip 保存到您的计算机并解压缩其内容,其中包括:
    • app.js 是应用程序的主要可执行程序;它启动 Express 服务器来处理 Web 请求。
    • websitetitle.js 是一个简单的模块,它提供网站标题的文本。
    • package.json 描述您的 Node.js 项目并指定它的所有依赖关系。此文件由标准 NPM 依赖关系管理器处理。
    • views 目录包含组成应用程序的页面的模板。每个模板文件都可以包含动态元素,这些元素依据传入的数据而动态呈现。
    • public 目录包含应用程序的所有静态资产。这可包括在浏览器上运行的 CSS、图像和客户端 JavaScript 代码。
    • test 目录包含网站 Title 模块的单元测试。

第 2 步. 将该应用程序部署到 Bluemix

  1. 如果尚未登录 Bluemix,请从您的 OS 命令提示符运行以下命令进行登录:

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

  2. 确保您位于下载的应用程序的目录中,运行此命令来将应用程序部署到 Bluemix:

    cf push your-app-name

    为应用程序选择的名称必须在 Bluemix 上是唯一的;换句话说,它不能被其他任何 Bluemix 用户使用。如果该名称(称为 “route”)已被使用,您将得到一个错误。

  3. 在浏览器中打开 https://your-app-name.mybluemix.net/ in 来试用您的应用程序,这是一个名为 Lauren's Lovely Landscapes 的简单的网络商店。在之前的教程中,您可能已熟悉该应用程序。该商店目前销售三种印刷品;每种印刷品的页面都显示了关联的名称、图像和价格。但您会注意到,这个网络商店中没有列出任何印刷品!这是因为这个网络商店将显示来自某个数据库的印刷品库存,但现在还没有数据库。您将在下一步中创建 Cloudant NoSQL DB 服务的一个实例,并将它绑定到这个网络商店。
未列出印刷品的网络商店
未列出印刷品的网络商店

第 3 步. 创建 Cloudant NoSQL DB 服务并将其绑定到该应用程序

Bluemix 上的 Cloudant NoSQL DB 服务提供了 Cloudant 实例,您可以在您的应用程序中绑定这些实例并立即使用它们。目前的共享计划是一个实例,它每月免费提供至多 2 GB 传输空间和 50,000 次 API 调用;付费选项允许无限量的传输和 API 调用。

请注意,该共享计划实际上是一个付费计划,但是,如果您的每月传输和 API 配额符合条件,它就是免费的。

  1. 使用该共享计划创建 Cloudant NoSQL DB 服务的一个实例,并将它命名为 “laurenlandscapesdb”:

    cf create-service cloudantNoSQLDB shared laurenlandscapesdb

  2. 将这个 Cloudant NoSQL DB 服务实例绑定到运行的应用程序:

    cf bind-service your_app_name laurenlandscapesdb

    cf restage your_app_name

如果重新加载您的浏览器,您会注意到网络商店中仍然没有印刷品。即使数据库服务现在已经绑定到了应用程序,您仍然需要创建一个数据库并添加数据。这将在第 5 步中完成。

第 4 步. 检查代码结构

查看代码文件和目录;该结构应与之前的教程类似。

应用程序的操作也应该是类似的。让我们来复习一下,对 Lauren's Lovely Landscapes 商店的一个页面的每个 Web 请求由代码路由到 views 目录中的某个模板。路由到一个模板时,代码就会附加一个包含网站标题信息的 JavaScript 对象。该模板使用此对象呈现它的标题(“Lauren's Lovely Landscapes”)。

您会注意到一个主要区别:每个印刷品的模板(alaska.jade、australia.jade、antarctica.jade)不再存在;现在有一个数据驱动的 printdisp.jade 模板来处理照片印刷品细节和定价的显示。

新的 printdisp.jsp 页面
新的 printdisp.jsp 页面

该代码现在前进到以下两个模板中的一个:home.jade 或 printdisp.jade。针对网络商店主页的请求将被转发,而且会将从数据库中检索到的印刷品数组附加到 home.jade。然后,home.jade 根据可用的印刷品来生成主页。

如果用户选中任何可用的印刷品,代码会将传入的请求转发给 printdisp.jade,并向请求附加所选印刷品的信息。然后 printdisp.jade 会动态地生成该印刷品的标题、jpg 引用、描述和价格。

让我们试一下。首先,您需要创建一个数据库,并将印刷品库存信息添加到其中。

第 5 步. 使用 nano 将数据添加到 Cloudant NoSQL 数据库中

nano 是一个用于 Apache CouchDB 的非常简单的 Node.js 库。Bluemix 上的 IBM Cloudant NoSQL DB 服务提供了一个兼容 CouchDB 的 API,可以使用 nano 直接访问该数据库。

  1. 从部署的应用程序中获取绑定的 Cloudant NoSQL DB 服务实例的数据库凭据:

    cf env your-app-name

    这将显示可供已部署的应用程序使用的环境变量。绑定的 Cloudant NoSQL DB 服务的信息将显示在 VCAP_SERVICES 中。查找以下类似代码:

    "VCAP_SERVICES": {
      "cloudantNoSQLDB": [
       {
        "credentials": {
         "host": "88396eb3-c56d13d6593-bluemix.cloudant.com",
         "password": "3f7c34a",
         "port": 443,
         "url":  "https://sfsfsabluemix:sfsfasfsa@8-8400-ec56d13d6593-bluemix.cloudant.com",
         "username": "232-bluemix"
        },
    …

    记下服务凭据的 url 值。您接下来需要使用它。

  2. 在编辑器中打开 dataseeder.js,修改第一行中的 URL,使之来与来自 VCAP_SERVICES 的 url 匹配。保存更改。这使您能够从台式机访问 Cloudant NoSQL DB 服务。

    备注:在您的计算机上运行 dataseeder.js 之前,需要安装 nano 库和其他项目依赖项。可以通过发出下面这条命令,使用 npm 依赖关系管理器来完成此操作。

    npm install

  3. 运行 dataseeder.js:

    node dataseeder.js

    此代码将执行以下操作:

    • 如果 prints 数据库已存在,则删除它
    • 创建 prints 数据库
    • 插入一个 id 为 “inventory” 的文档。此文档包含一个名为 “landscapes” 的 JSON 字段,该 JSON 字段是库存中目前拥有的印刷品数组。

    对于这个网络商店应用程序,inventory 文档中的每个 landscapes 数组元素都拥有以下字段:

    • id 是该印刷品的数字产品 id
    • title 是该印刷品的标题
    • description 是该印刷品的产品描述
    • imgsrc 是包含该印刷品的 JPEG 文件的名称
    • price 是该印刷品的美元价格
    • quan 是目前库存的该印刷品册数

    成功完成上述操作后,您会看到与以下代码类似的输出:

    all records inserted.
    { ok: true,
      id: 'inventory',
      rev: '1-df83420e7c2fb757a5fb3de7c290d675' }

    当然,您的文档修订版 ID 将会有所不同。

    您已经创建了库存数据库。查看 dataseeder.js 中的代码:它使用 nano 库访问您的 Cloudant NoSQL DB 服务,而且很容易理解。

  4. 在浏览器中打开 https://your-app-name.mybluemix.net/,再次试用您的应用程序,或者您已经打开它,那么请在浏览器重新加载该页面。

您现在应能看到商店中已有的印刷品。但是,您会注意到,Australia 印刷品使用红色突出显示,而且无法选中它;这是因为该印刷品已脱销。如果查看 dataseeder.js 中的代码,您会看到 Australia 印刷品的数量被设置为 0。

Lauren's Lovely Landscapes 商店中的 Australia 印刷品已脱销。
Lauren's Lovely Landscapes 商店中的 Australia 印刷品已脱销。

第 6 步. 探索数据驱动的动态网站生成

在最后一步中,假设一批新的 Australia 印刷品已到货,您将更新数据库中的可用数量。您会看到该网站在动态地发生更改,以包含新到货的商品。

当然,您可以编写一个类似 dataseeder.js 的程序来更改 Australia 印刷品的数量。但是,在这一步中,您将使用一个基于云的 Cloudant 仪表板来手动执行更新。Cloudant 仪表板对管理、查看和操作 NoSQL 数据库中的数据很有用。

  1. 登录到您的 Bluemix 仪表板。
  2. 找到您创建的 laurenlandscapesdb Cloudant NoSQL DB 服务。单击左侧窗格中的 SERVICES 来展开它,选择 “laurenlandscapesdb”。 laurenlandscapesdb Cloudant NoSQL DB 服务
    laurenlandscapesdb Cloudant NoSQL DB 服务
  3. 单击 Launch 按钮。这会启动 Cloudant 仪表板并显示您数据库的列表。您可从此仪表板中查看和修改所有数据库和文档。 包含数据库列表的 Cloudant 仪表板
    包含数据库列表的 Cloudant 仪表板
  4. 现在,请单击 “prints” 数据库。然后单击 All documents。您现在应该看到 prints 数据库中的所有文档。在我们的示例中只有一个文档,它的 id 为 “inventory”,是在上一步中由 dataseeder.js 插入的。 prints 数据库中列出的 inventory 文档
    prints 数据库中列出的 inventory 文档
  5. 单击文档左上角的编辑按钮。这将打开 inventory 文档供您编辑。您现在将看到 inventory 文档中的所有印刷品。 列出了所有印刷品的 inventory 文档
    列出了所有印刷品的 inventory 文档
  6. 将 Australia 印刷品的 “quan” 字段从 0 更改为 3。然后保存修改的文档。
  7. 在您的浏览器中重新加载 https://your-app-name.mybluemix.net/。您现在可以看到,所有印刷品都有货了!Australia 印刷品不再显示为红色。尝试选择它来查看细节。

    如果想知道 home.jsp 如何处理脱销印刷品的动态呈现,可以检查 home.jade 文件中的 Jade 模板代码:
    each item in prints    
    	if item.quan > 0   
    		.preview  
    			a(href='printdisp?id=#{item.id}')
    				| #{item.title}
    				br
    				img.thumb(src='/static/images/#{item.imgsrc}')
    	else
    		.preview.outofstock
    			a.outofstock(href='printdisp?id=#{item.id}')
    				| #{item.title} - 
    				i
    					small
    						| out of stock
    				br
    			img.thumb(src='/static/images/#{item.imgsrc}')

其他 Bluemix 服务

除了 Cloudant NoSQL DB 服务之外,Bluemix 还提供了许多有趣的服务,它们可给您的应用程序增添价值和特性。例如,IBM Watson 的许多学习和认知功能 现在都能够以 Bluemix 服务的形式提供。您可能想浏览 Bluemix 服务目录,想象您可添加到已部署的 Web 应用程序中的所有新特性。

测验

测试您在本教程中学到的知识。答案在下方。

  1. 可用于 Cloudant NoSQL 数据库的 API 兼容:
    1. Office Couch
    2. Apache CouchDB
    3. Apache Tomcat
    4. IBM DB2
    5. IBM Informix
  2. Cloudant NoSQL 数据库实例中的文档的格式为:
    1. JavaScript
    2. DDL
    3. CSV
    4. JSON
    5. XML
  3. 以下哪一项是用于修改 Bluemix 上的 Cloudant NoSQL 记录的非常简单的 Node.js 库:
    1. mini
    2. nano
    3. pico
    4. micro
    5. nonna
  4. 要通过云访问您的 Cloudant NoSQL 数据库,您可使用:
    1. IBM SQL 数据库控制台
    2. Cloudant 仪表板
    3. Bluemix Database Explorer
    4. Cloud NoSQL Data Service
    5. IBM Over the Cloud Connect
  5. 要将应用程序推送到 Bluemix,或者创建服务并将其绑定到某个应用程序,可以使用以下命令行工具:
    1. IBM Cloud Tool
    2. Cloud Foundry 命令行接口
    3. Power Command Tools for Bluemix
    4. CloudPower Command Line Tool
    5. Linux Toolbox IV – Extended Edition for Bluemix

测验的答案

1. b,2. d,3. b,4. b,5. b

 

结束语

在本教程中,您:

  • 在 Bluemix 上创建了一个 Cloudant NoSQL DB 服务实例
  • 将该 Cloudant NoSQL DB 服务实例绑定到了一个 Web 应用程序
  • 创建了一个数据库,并在 Node.js 中以编程方式将文档插入到 Cloudant NoSQL 数据库实例中
  • 使用了用于 CouchDB 的非常简单的 Node.js 库来修改 Cloudant NoSQL 数据库
  • 使用基于云的 Cloudant 仪表板管理并编辑了一个 Cloudant NoSQL 数据库
  • 学习了如何在 Bluemix 上创建数据驱动的动态 Web 应用程序

本教程是 developerWorks 上的 “Bluemix 基础” 教程系列的最后一篇!如果您已经完成了所有这些教程,那么您已经出师了!

要获取稳定的教程和技术资源流来帮助您继续使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix 页面


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Java technology, Web development
ArticleID=1021471
ArticleTitle=Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中
publish-date=11162015