转载

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

 

概述

学习如何在 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 数据库添加到您的 Node.js 应用程序中

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

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

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

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

完成本教程所需的知识

 

完成本教程所需的软件

 

第 1 步. 下载代码

 
  1. 单击此按钮下载示例 Node.js 应用程序 nodedbtutorial.zip 的代码:

    下载示例 Node.js 应用程序

  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 服务的一个实例,并将它绑定到这个网络商店。
Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中

点击查看大图

第 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 模板来处理照片印刷品细节和定价的显示。

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

点击查看大图

该代码现在前进到以下两个模板中的一个: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/,再次试用您的应用程序,或者您已经打开它,那么请在浏览器重新加载该页面。

不同于 dataseeder.js,您会注意到可以找到 app.js,而且它被连接到 Cloudant NoSQL 数据库实例,您无需在其代码中修改数据库 URL。这是因为在 Bluemix 下运行时,app.js 会读取和解析 VCAP_SERVICES 环境变量,从凭据中提取该 url。

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

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

点击查看大图

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

 

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

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

  1. 登录到您的 Bluemix 仪表板。
  2. 找到您创建的 laurenlandscapesdb Cloudant NoSQL DB 服务。单击左侧窗格中的 SERVICES 来展开它,选择 “laurenlandscapesdb”。 Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中

    点击查看大图

  3. 单击 Launch 按钮。这会启动 Cloudant 仪表板并显示您数据库的列表。您可从此仪表板中查看和修改所有数据库和文档。 Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中

    点击查看大图

  4. 现在,请单击 “prints” 数据库。然后单击 All documents。您现在应该看到 prints 数据库中的所有文档。在我们的示例中只有一个文档,它的 id 为 “inventory”,是在上一步中由 dataseeder.js 插入的。 Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中

    点击查看大图

  5. 单击文档左上角的编辑按钮。这将打开 inventory 文档供您编辑。您现在将看到 inventory 文档中的所有印刷品。 Bluemix 基础:将 Cloudant NoSQL 数据库添加到您的 Node.js 应用程序中

    点击查看大图

  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 页面


    
正文到此结束
Loading...