首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

构建您的第一个 Node.js 网站(3)

构建您的第一个 Node.js 网站(3)

Bluemix 支持访问优秀的数据库服务,无需执行任何安装或管理操作。对于存储计数器,我的许多选择包括多个关系数据库和 NoSQL 选项,比如 MongoDB、Cloudant 和 Redis
“Redis 服务的生命周期与应用程序的生命周期独立,所以存储在服务中的数据会在应用程序重新启动后持久保存。”

这部分从一个新的 DevOps Services 项目入手,所以在继续我们的介绍之前,没有必要完成   和   中的练习。

示例应用程序将数据存储在一个由 Bluemix 管理的独立的 Redis 服务中。该服务的生命周期与应用程序的生命周期独立,所以存储在该服务中的数据会在应用程序重新启动后持久保存。
要访问 Bluemix 服务,需要在代码中执行大量设置。您将使用一个包含所有 Redis 服务设置的入门项目。新应用程序流类似于:
对您的要求
  • 一个   帐户。
  • 一个   帐户。

第 1 步:创建并部署您的 HTML 数据库应用程序的副本
  • 从 Web 浏览器登录到  。
  • 在一个独立的浏览器选项卡中,登录到  。
  • 单击本文上面的 获取代码(Get the code)按钮。
  • 在 DevOps Services 中,单击 EDIT CODE 按钮,然后单击菜单上的 FORK 按钮来创建您自己的代码副本供您使用,并使用您选择的项目名称保存它。
  • 快速看看相关的文件:
    • 在 package.json 中,可以看到 Redis 的其他依赖关系:                            "redis":"*"。
    • 在 manifest.yml 中,可以看到创建 Redis 服务的规范:                                
      1
      2
      3
      4
      5
      6
      services:
        redis-5a659:
          label: redis
          provider: core
          version: '2.6'
          plan: 100




    • 在 app.js 中,搜索 redis 以查看对 Redis 服务的接口执行的所有更改。
  • 使用本文章系列的前 2 部分中使用的相同流程,手动部署该应用程序。
  • 单击根文件夹页面的 Manual Deployment Information 区域中的 NodeJS_Simple_3 链接,以便在新的浏览器选项卡中打开该应用程序。
    在运行的应用程序中,可以看到两个都以 1 开始的用户计数:Node.js 服务器中的用户计数(在   中配置)和一个存储在数据库中的新计数。
  • 刷新该浏览器页面并在每次刷新后观看计数增量。现在(第一次部署后),服务器中的用户计数和数据库中的用户计数仍然相同。
第 2 步:观察重新启动后的数据库持久性
  • 返回到 DevOps Services 中的手动部署信息,突出显示您的部署,然后单击实心的黑色正方形来停止您的应用程序:
  • 再次突出显示您的部署,单击指向右侧的实心三角形来启动该应用程序:
  • 浏览正在运行的应用程序。您可能注意到,Node.js 应用程序中的用户计数重置为 1,但在,在您停止并重新启动应用程序之前的页面上所显示的数字上,来自数据库的计数已开始递增。出现这种情况是因为,Redis 服务拥有独立于 Node.js 应用程序的生命周期。
第 3 步:在 Bluemix 上使用 Redis 服务使用 Bluemix 仪表板直接使用 Bluemix 服务:
  • 在 DevOps Services 手动部署信息中突出显示您的部署,单击 Manage 链接。此操作会打开 Bluemix 仪表板,您可以在其中处理该应用程序和 Redis 服务:
  • 单击右上角附近的齿轮形状的按钮,然后单击 Delete App
  • Are you sure... 对话框中,选择删除 Redis 服务 (redis-5a659) 的复选框并单击 OK。通过删除该服务和应用程序,可以删除跨应用程序重启而持久保存的数据库计数器。
  • 返回到 DevOps Services 中的手动部署信息,使用云形状的按钮重新部署该应用程序。因为您删除了 Redis 服务,所以这次部署会创建该服务的一个新实例。
  • 浏览正在运行的应用程序,您可以观察到,Redis 数据库中存储的用户计数也被重置为 1。
第 4 步:向数据库添加数据现在将会更新代码,将一个计数器存储在 Redis 服务中(该计数器将按 2 递增),然后在 HTML 页面上显示该计数器。因为对 Redis 服务的调用是异步的,所以必须在一个嵌套的结构中插入新调用,以确保正确的排序。(另一个选项是添加显式异步库 — 这个主题不属于本文的讨论范围。)
  • 打开 app.js 并找到 client.incrby 行。此语句将会递增 Redis 中的 DBuserCountBy1 变量,在 replyBy1 变量中返回更新的值。
  • 添加一行来将数据库变量 DBuserCount2 按 2 递增,返回值 replyBy2:                        
    1
    client.incrby("DBuserCountBy2", 2, function (err, replyBy2);





                        要确保对 Redis 的调用是同步的,此语句必须嵌套在 DBuserCountBy1 的增量内:                        
    1
    2
    client.incrby("DBuserCountBy1", 1, function (err, replyBy1) {
       client.incrby("DBuserCountBy2", 2, function (err, replyBy2) {





                        确保还添加了结束的 });。
  • 更新 res.render 语句,以便传递从 Redis 函数调用的 replyBy2 变量中返回的 DBuserCountby2:                        
    1
    res.render('index', {userCount: userCount, DBuserCountBy1: replyBy1, DBuserbytwo: replyBy2});





                        代码的 app.get 部分现在应该类似于:                        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    app.get('/', function(req, res) {
      userCount = userCount + 1;
      // Increment the value in the database and render the results
      client.incrby("DBuserCountBy1", 1, function (err, replyBy1) {
        client.incrby("DBuserCountBy2", 2, function (err, replyBy2) {
          res.render('index', {userCount: userCount, DBuserCountBy1: replyBy1, DBuserbytwo: replyBy2});
          });
      });
    });




  • 更新 index.ejs HTML 页面已呈现到 DbuserCountBy2:                        
    1
    <p>The stored user count by two in my redis database is <%= DBuserCountBy2 %></p>.




  • 重新部署该应用程序,验证所有计数的行为是否符合预期。
返回列表