部署独立的 Node.js 应用

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

本主题介绍如何将 Node.js 应用从本地系统部署到 Apigee Edge。在本主题中,我们将讨论如何使用名为 apigeetool 的命令行工具将 Node.js 应用部署到 Apigee Edge。

关于将 Node.js 代码部署到 Apigee Edge

您可以使用名为 apigeetool 的命令行实用程序,将本地系统中的现有 Node.js API 应用(包括任何依赖的 Node.js 模块)部署到 Apigee Edge。该实用程序会自动将应用及其依赖项捆绑到 API 代理中,并将其部署到 Edge 上。

例如,假设您使用 Express 在 Node.js 中创建了一个 Web 应用。应用作为 HTTP 服务器运行,该服务器侦听 HTTP 请求、处理这些请求、返回数据等。当您使用 apigeetool 将 Node.js 应用部署到 Edge 时,该应用会被封装在代理中,并在 Edge 平台的上下文中执行。然后,您可以通过其新的代理网址调用应用,并通过使用标准 Edge 功能(例如 OAuth 安全机制、配额政策、威胁防护政策、条件流、缓存等)来“包装”应用,从而为其增添价值。

apigeetool 有什么作用?

当您运行带有 deploynodeapp 选项的 apigeetool 实用程序时,该实用程序会执行以下操作:

  • 生成用于存放 Node.js 应用的 API 代理配置软件包。
  • 将 Node.js 应用与通过 NPM(Node.js 封装模块)安装的任何 Node.js 软件包打包在一起。
  • 使用 Edge Management API 将 API 代理配置软件包导入到 Apigee Edge 上的指定组织。
  • 将 API 代理部署到环境。
  • 在 Apigee Edge 上执行 Node.js 应用,并通过网络提供该应用。

准备使用 apigeetool

在开始之前,您需要安装 apigeetool 实用程序。

您可以通过 npm 安装 apigeetool,也可以通过克隆和关联 GitHub 中的代码来安装。

通过 npm 进行安装

apigeetool 模块及其依赖项专为 Node.js 设计,可通过 npm 使用以下命令获取:

$ sudo npm install -g apigeetool

通常,-g 选项会将模块放置在以下位置: 基于 *nix 的机器上的 /usr/local/lib/node_modules/apigeetool

从 GitHub 安装

从 GitHub 下载或克隆 API 平台工具。如需查看安装说明,请参阅代码库根目录中的 README 文件。

$ git clone https://github.com/apigee/apigeetool-node.git

安装完成后,请确保 apigeetool 可执行文件位于您的路径中。您可以输入以下内容进行测试:

$ apigeetool -h

使用 apigeetool 将 Node.js 应用部署到 Edge

注意:在部署之前,您需要知道自己的 Apigee Edge 组织名称、用户名以及 Apigee Edge 账号的密码。您需要此信息才能正确构成 apigeetool 命令。

如需使用 apigeetool 部署 Node.js 应用,请执行以下操作:

  1. 在终端窗口中,cd Node.js 应用的根目录。
  2. 使用 deploynodeapp 命令执行 apigeetool 实用程序:

    $ apigeetool deploynodeapp -n {A name for your new proxy} -d {The root directory of your Node.js app} -m {The name of the main Node.js file} -o {Your org name on Edge} -e {The environment to deploy to} -b {The base URL for your proxy} -u {Your Edge email address} -p {Your Edge password}
    
    例如:

    $ apigeetool deploynodeapp -n myNodeApp -d . -m server.js -o myorg -e test -b /myNodeApp -u ntesla -p myPassword
    
  3. 在终端窗口中查看输出。它将如下所示:

    Importing new application myNodeApp
    Imported new app revision 1
    Deploying revision 1
      Deployed.
    Proxy: "myNodeApp" Revision 1
      Environment: test BasePath: /myNodeApp
      Status: deployed

    如果您看到“状态:已部署”,则表示已完成。一切顺利。您的 Node.js 应用已封装在 API 代理中,部署到 Edge,并且正在运行并等待处理请求。 已准备好进行测试。

  4. 测试您的代理。例如:

    $ curl http://myorg-test.apigee.net/myNodeApp
    Hello, My Node App!
    
  5. 如果您愿意,可以登录 Apigee Edge 账号,然后前往管理界面的“API 代理”页面。您会看到新代理显示在其中。

apigeetool 如何处理相关文件和模块

如果您的 Node.js 应用依赖于已安装的模块,apigeetool 会通过压缩 node_modules 文件夹并将其添加到代理软件包来处理这些模块。您无需执行任何其他操作。包含其他源代码的任何目录也是如此。apigeetool 实用程序会将它们压缩,并随软件包一起部署。

您无法在 Edge 管理界面编辑器中修改这些压缩目录中的文件。如果您需要更改这些设置,可以导出项目,在本地修改文件,然后使用 apigeetool 或通过管理界面导入导出的项目来重新部署。另请参阅“使用 Node.js 代码导出和导入代理”。

apigeetool 的基本使用信息

如需了解有关 apigeetool 实用程序的输入参数的基本使用信息,请输入:

$ apigeetool deploynodeapp -h

  Usage: deploynodeapp -n [name] -o [organization] -e [environment]
  -d [directory name] -m [main script file]
  -u [username] -p [password]
  -b [base path] -l [apigee API url] -z [zip file] -i -h
  -o Apigee organization name
  -e Apigee environment name
  -n Apigee proxy name
  -d Apigee proxy directory
  -m Main script name: Should be at the top level of the directory
  -u Apigee user name
  -p Apigee password
  -b Base path (optional, defaults to /)
  -L Apigee API URL (optional, defaults to https://api.enterprise.apigee.com)
  -z ZIP file to save (optional for debugging)
  -i import only, do not deploy
  -R Resolve Node.js modules on Apigee Edge. Equivalent to running npm install on your project. 
  -U Uploads Node.js modules to Apigee Edge. 
  -h Print this message

使用现有的 Node.js 文件创建新代理

将现有 Node.js 应用集成到 API 代理中的另一种方法是在创建代理时添加该应用。您可以通过管理界面和“新建 API 代理”对话框完全实现此目的。

  1. 在 API 代理摘要页面中,点击 +API 代理
  2. 在“新建 API 代理”对话框中,选择现有 Node.js
  3. 使用选择文件按钮选择要导入的一个或多个 Node.js 文件。
  4. 为代理命名。在此示例中,我们将其称为 hellonode
  5. 将版本 /v1 添加到项目基本路径。对 API 进行版本控制是一种最佳实践。
  6. 点击构建
  7. 点击开发进入“开发”视图。
  8. 在代码编辑器中打开 TargetEndpoint 文件。
  9. 请确保 <ScriptTarget> 元素指定了主 Node.js 文件,如下所示:


    <ScriptTarget>
            <ResourceURL>node://server.js</ResourceURL>
            <Properties/>
    </ScriptTarget>
  10. 点击保存

添加和调用新的 Node.js 资源文件

向代理添加 Node.js 代码的另一种方法是直接添加,可以通过界面添加,也可以从本地文件系统上传。您还可以指定哪个 Node.js 文件是主文件,即 Edge 在部署代理时调用的文件。

通过界面添加新的 Node.js 文件

通过管理界面,您可以向 Edge 平台上的代理添加其他 Node.js 源文件。您可以直接在界面中创建它们,也可以从文件系统中导入它们。首先,我们来看看如何通过界面执行此操作。

如需创建新的 Node.js 资源文件,请执行以下操作:

  1. 在“开发”视图中,从“新建”菜单中选择新建脚本
  2. 在“添加脚本”对话框中,选择文件类型 Node 并为脚本命名。
  3. 点击添加

新的空白 Node.js 文件会在编辑器中打开。您可以将代码剪切并粘贴到文件中。该文件也会显示在 Navigator 的“脚本”部分中。

[[{"type":"media","view_mode":"media_large","fid":"2431","attributes":{"alt":"","class":"media-image","height":"312","typeof":"foaf:Image","width":"417"}}]]

从文件系统导入 Node.js 文件

如需将 Node.js 文件从文件系统导入到代理,请执行以下操作:

  1. 在“开发”视图中,从“新建”菜单中选择新建脚本
  2. 在“添加脚本”对话框中,点击导入脚本
  3. 使用文件工具选择您的 Node.js 文件。
  4. 系统会将该文件的名称添加到对话框中,但您可以根据需要进行更改。
  5. 点击添加。该文件会显示在 Navigator 的“脚本”部分中,并在编辑器中打开。
  6. 点击保存

如果您想调用导入的文件,则需要执行额外的步骤,如下一部分所述。

调用导入的 Node.js 文件

您无法简单地调用新导入或创建的 Node.js 文件。原因是 Edge 要求一个 Node.js 文件作为文件。主文件在目标端点定义的 <ScriptTarget> 元素中指定。如需指定哪个文件是主要的 Node.js 文件,请执行以下操作:

  1. 在导航器中的“目标端点”下,点击目标端点的名称(通常称为 default)。
  2. 在代码编辑器中,修改 <ScriptTarget> 元素,将 <Resource网址> 更改为要作为主 Node.js 文件的文件的名称。例如,如果您希望名为 hello-world.js 的文件成为主文件,则需要在 Resource网址 元素中输入:node://hello-world.js
  3. 点击保存

此时,您可以使用之前使用的任何代理路径来调用该文件。例如,我们一直在查看“Hello World!”示例,其中指定了基本路径 v1/hello。不过,您可以通过修改代理端点来更改基本路径。

  1. 在导航器中的“Proxy Endpoints”(代理端点)下,点击代理端点的名称(通常称为 default)。
  2. 在代码编辑器中,通过将 <BasePath> 更改为所需的任何名称来修改 <HttpProxyConnection> 元素。例如,如果当前的 <BasePath> 是 v1/hello,而您希望将其更改为 v1/my-node-file,请按如下方式更改 <BasePath> 元素:

    <BasePath>/v1/my-node-file</BasePath>
  3. 点击保存
  4. 使用新的基本路径调用代理,如下所示:

    $ curl http://myorg-test.apigee.net/v1/my-node-file
    Hello, World!
    

使用 Node.js 代码导出和导入代理

将包含 Node.js 代码的代理部署到 Edge 后,您可以随时将该代理导出回您的系统,在其中处理该代理,然后使用管理界面将其重新导入到 Edge。这种往返开发技术很常用。

  1. 在 API 代理摘要页面中,点击开发
  2. 在“开发”页面中,选择下载当前修订版本
  3. 在您的系统上解压缩下载的文件。

您可以从同一菜单中选择 Import Into New Revision,将代理软件包重新导入到 Edge 中。

您还可以使用 API 来部署代理。如需了解详情,请参阅通过命令行部署代理

后续步骤

在下一主题向现有 API 代理添加 Node.js 中,我们将说明如何向文件系统中的现有代理添加 Node.js 应用并将其部署到 Edge。