将 Node.js 添加到现有 API 代理

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

简介

本主题介绍如何将 Node.js 应用添加到本地文件 系统中的现有代理,以及如何将代理部署到 Apigee Edge。

准备开发环境

在本主题中,我们假定您已在本地 系统上设置代理开发环境,并且想要将 Node.js 应用集成到其中。

包含 Node.js 应用的代理应用的基本结构遵循下图所示的模式 ,其中包含一个基本 /apiproxy 文件夹以及用于 资源目标代理 的子文件夹。apiproxy/resources/node 文件夹是必须放置 Node.js 文件的地方 。其他文件夹包含定义代理和目标端点、代理流、 条件流等的 XML 文件。如需更完整地了解 API 代理结构, 请参阅 API 代理配置参考文档

请记住,作为代理一部分的任何 Node.js 代码都必须放置在 /apiproxy/resources/node 下。这是 Edge 在部署时查找它的位置。

使用 ScriptTarget 指定 Node.js 目标

将 Node.js 集成到代理的关键是在目标端点的 XML 文件中指定 <ScriptTarget> 元素。 在代理文件结构中,此 XML 文件位于 apiproxy/targets 中。默认情况下,文件名为 default.xml。

为了便于理解,请考虑目标端点通常指向某种后端服务。 在这种情况下,我们会访问 Apigee 模拟目标服务。目标端点定义如下所示:

<TargetEndpoint name="default">
    <Description/>
    <Flows/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <HTTPTargetConnection>
        <URL>http://mocktarget.apigee.net/</URL>
    </HTTPTargetConnection>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</TargetEndpoint>

<HTTPTargetConnection> 元素指定后端服务(Apigee 模拟目标服务)的网址。

但是,对于 Node.js,the Node.js 应用 本身 就是 目标。您可以使用 <ScriptTarget> 指定此目标,该目标位于 apiproxy/targets/default.xml 文件中。

Node.js 应用不是使用 <HTTPTargetConnection> 元素指定后端服务的网址,而是使用 <ScriptTarget> 元素直接引用,如下所示:

<TargetEndpoint name="default">
    <ScriptTarget>
         <ResourceURL>node://server.js</ResourceURL>
    </ScriptTarget>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
</TargetEndpoint>

<Resource网址> 参数必须始终以 node:// 为前缀, 后跟主 Node.js 脚本的名称。此外,如前所述,Node.js 资源必须 位于 /apiproxy/resources/node 的 API 代理范围内。

您可以在 ScriptTarget 中设置其他参数。如需了解详情,请参阅 高级 ScriptTarget 配置

为了便于说明,以下是主 Node.js 文件(名为 server.js)的源代码。这是一个基本的 HTTP 服务器,在收到请求时返回“Hello World!”:

var http = require('http');
console.log('node.js application starting...');
var svr = http.createServer(function(req, resp) {
    resp.end('Hello, Node!');
});

svr.listen(process.env.PORT || 9000, function() {
    console.log('Node HTTP server is listening');
});

总而言之,假设 Node.js 应用是在名为 server.js 的文件中实现的,并且端点配置都名为 default.xml,那么包含 Node.js 脚本的 API 代理具有以下结构:

/apiproxy/proxyName.xml
/apiproxy/proxies/default.xml
/apiproxy/targets/default.xml
/apiproxy/resources/node/server.js

准备部署应用

大多数 Node.js 应用都有依赖项文件,并且在基本目录中包含 package.json 文件。在这种情况下,最佳 实践是运行 npm 实用程序,以确保在部署之前使用依赖项填充顶级 node_modules 目录。如果 node_modules 中未 包含任何远程依赖项,则 Node.js 应用 将无法在 Edge 上运行。

您可以使用 npm 实用程序轻松地将所有依赖项检索到文件系统中:

  1. 从 Node.js 应用的基本目录中,运行以下命令:
$ npm install 

$ npm update

安装依赖项后,您就可以将代理部署到 Edge 了。

将 Node.js 应用部署到 Apigee Edge

在部署之前,您需要知道 Apigee Edge 账号的组织名称、用户名和密码。您需要此信息 才能正确构成部署工具命令。

以下是该命令。它假定(使用 -d 标志)您位于代理的根目录中。 如果您的代理名为 foo,请从 foo 目录输入以下命令:

$ apigeetool deployproxy -u username -p password -o org -e test -n hellonode -d .
如需了解每个命令标志的含义,请执行以下操作:

$ apigeetool deployproxy -h

如需快速了解摘要,请参阅以下内容:

  • -n 此标志可让您 指定在部署应用时创建的代理的名称。您将在管理界面中看到此 名称。
  • -d 指定 API 代理的 根目录。
  • -o-e-u-p 指定组织名称、 部署环境、用户名和密码。
就是这样。您的 Node.js 应用封装在 API 代理中,部署到 Edge 并执行。它 正在等待请求,并已准备好进行测试。

测试新的 API 代理

您刚刚将 Node.js 应用添加到了现有 API 代理,并将该代理部署到了 Apigee Edge!如需对其进行测试,请运行以下 c网址 命令。我们假定使用了默认基本路径 (/)(基本路径 在代理端点配置文件中指定)。请务必将 org_name 替换为您的组织 名称。如果您未安装 c网址,可以在浏览器中输入网址。

$ curl http://org_name-test.apigee.net/
Hello, Node!

在管理界面中查看新代理

登录您的 Apigee Edge 账号,然后前往 API 代理页面。您将看到名为“hellonode”的代理列在那里。

点击“hellonode”可查看有关代理的详细信息。在“开发”视图中,您可以查看 上传的源代码、添加政策、修改流等。

后续步骤

如需了解如何在 Apigee Edge 上调试运行的 Node.js 应用,请参阅 调试 Node.js 代理和问题排查