使用作为 Web 开发人员的您已经熟悉的语言和工具,开始在云中工作。在本教程中,将学习如何运行、修改、测试一个简单的 Node.js 应用程序并将其部署到云中。在将应用程序部署到 IBM 云开发平台 Bluemix™ 后,任何人都可以通过网络访问它。
本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇文章。
IBM Bluemix 是企业开发人员构建、运行、扩展和管理应用程序的地方。准备好开始在 Bluemix 上创建自己的应用程序了吗?本教程将介绍托管一个 Node.js 应用程序的步骤。您首先要提供一个示例 Node.js 应用程序,在本地系统上运行它,修改它的代码,然后将该应用程序部署到 Bluemix,以便任何在线的人都可以使用它。
如果不确定您可能看到的 Bluemix 术语和状态消息的含义,请阅读本教程的 术语表和状态消息 部分。
这里简要概括了在本教程中将如何使用 Bluemix:
您使用在云中运行的 Express Web 框架(我将此组合称为 Express 服务器)运行您自己的 Node.js HTTP 服务实例。Express 服务器成功部署后,将继续运行,不会与任何人共享它。
您还将在计算机上的一个 Express 服务器实例中运行该应用程序。使用此设置,可以快速测试和调试您的应用程序,无需连接网络并在每次执行更改后上传代码。
当代码在本地服务器上正常运行,而且您觉得已准备好与大家分享它后,使用 Cloud Foundry CLI 将您的 Web 应用程序(包括 Express 服务器)上传到云中(图中的虚线箭头表示的流程)。然后,您的应用程序可以通过 Bluemix 提供,任何拥有浏览器的人都可以通过网络访问它。
观看:npm 是什么?
websiteTitle
模块的单元测试。像大多数 Node.js Web 应用程序一样,此应用程序可立即部署到 Bluemix,无需额外的修改或配置。现在将它部署到 Bluemix:
cf api https://api.ng.bluemix.net/
cf login
cf push 您的应用程序名称
您为应用程序选择的名称必须在 Bluemix 上是唯一的 — 未被其他任何 Bluemix 用户使用。如果该名称(称为一个路由)已被使用,您会获得一个错误。
您刚才运行的命令:
cf
命令行工具和一个
Bluemix 帐户。在本教程后面,将进一步了解该 buildpack 如何与 Bluemix 一起载入和部署您的应用程序。
从下一步开始,将检查和修改应用程序的代码。一个具有多选项卡支持的语法突出显示编辑器可以让您更轻松地处理多个 JavaScript 和模板源代码文件。
查看解压的 ZIP 文件中的 views 目录。您可以看到 4 个组成网站的 Jade 模板文件 — .jade 文件。
此图显示了该应用程序的工作原理:
每个针对 Lauren's Lovely Landscapes 商店的某个页面的 Web
请求都由您的代码路由到这些模板中的一个模板。路由到模板时,您的代码会附加一个包含网站标题信息的 JavaScript
对象。该模板使用此对象呈现它的标题 (Lauren's Lovely Landscapes
)。
在 app.js 中,您可以看到将请求路由到某个模板所用的代码,以及一个包含来自 websiteTitle
对象的标题的变量:
app.get('/', function (req, res) { res.render('home', {title: websiteTitle.getTitle()}); }); app.get('/alaska', function (req, res) { res.render('alaska', {title: websiteTitle.getTitle()}); }); app.get('/antarctica', function (req, res) { res.render('antarctica', {title: websiteTitle.getTitle()}); }); app.get('/australia', function (req, res) { res.render('australia', {title: websiteTitle.getTitle()}); });
在本例中,所有 4 个路径(/
、/antarctica
、/alaska
和 /australia
)都被路由到相应的模板,以及附加的网站标题。
如果检查其中一个模板(比如 alaska.jade),您会看到这里使用了一个 Jade 模板变量来呈现该标题:
<head> <title> ${title} </title> ...
在启动 Express 服务器时,它会在一个端口上侦听传入的请求。每次部署应用程序时,Bluemix
用来将应用程序连接到网络的端口都有可能发生改变。但是,Bluemix 提供了一个 PORT
环境变量,它会告诉应用程序要侦听哪个端口。在 app.js 中,可以看到用来获取环境变量并在指定的端口上执行侦听的代码:
var appEnv = cfenv.getAppEnv(); app.listen(appEnv.port, appEnv.bind, function() { ... }
您现在已经准备好在计算机上本地运行该应用程序。
npm install
node app.js
为模块编写单元测试是一种不错的 Node.js 编码实践。
npm install mocha -g
mocha
您可以看到两个测试都在运行。在打印到屏幕的结果中,每个通过的测试旁边会出现一个绿色的勾号,mocha 会报告获得通过的测试总数。所有单元测试都已通过:
在这一步中,将会修改印刷品的价格,查看它是否会立即在本地运行的网站上获得更新。
100.00
更改为 99.99
并保存该文件。更改的行应类似于:
<div id="price">99.99</div>
node app.js
要确保您的代码更改没有造成任何破坏,请养成每次修改应用程序后运行单元测试的习惯。
使用 mocha
命令重新运行这些单元测试。您会再一次在屏幕输出中看到所有绿色的勾号,如果没有红色文本,则表明所有单元测试已成功通过。
当在团队环境中开发 Node.js 代码时,您可能希望每次将代码提交(修改并贡献)到团队的存储库时都会运行所有单元测试。Bluemix 提供了 DevOps Services,可以通过配置它们在构建项目的工作流中自动运行单元测试。本系列的 下一篇教程 将会更详细地介绍 DevOps Services。
要让网络上的每个人都知道 Antarctica 印刷品的新价格,需要将更改后的应用程序部署到 Bluemix。
提示:您还可以指定 Bluemix 应向您的应用程序分配多少内存。例如,要设置 128 MB
内存,使用:cf push -m 128M 您的应用程序名称
在第 2 步中,您了解了将 Node.js 应用程序部署到 Bluemix 是多么简单。再次从您代码的根目录中运行此命令:
cf push 您的应用程序名称
成功部署后,在任何 Web 浏览器中访问以下链接来试用该应用程序:
https://您的应用程序名称.mybluemix.net/
让我们来看看在使用 Bluemix 时可能遇到的一些术语和状态消息。
请熟悉以下重要术语,在使用 Bluemix 时,常常会在文档和状态消息中看到它们。
在发出 cf push
CLI 命令时,您会看到一系列状态消息。如果仔细查看,就会看到以下相继短语:
测试您在本教程中学到的知识。答案 在下方。
PORT
环境变量表示1. d,2. c,3. e,4. d
在本教程中,您:
现在,通过下一篇教程在 developerWorks 上继续学习 “Bluemix 基础”。您将学习如何为 Node.js 应用程序设置团队协作和自动化部署:
要获得源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix 页面。