在 Node.js 中访问流变量

您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
info

简介

使用 apigee-access 模块在 Node.js 应用中访问 Apigee Edge 流 变量 。该模块具有用于获取设置删除变量的方法。它还提供了一种用于设置整数变量的便捷方法。

流变量存在于 API 代理流的环境中。一些变量 "内置"在 Edge 中。其他变量在政策执行时创建,您也可以创建自己的变量。流 变量通常用于将数据从一项政策传递到另一项政策,以及在条件 流中设置条件。如需了解流变量,请参阅流变量和 条件

如需了解 apigee-access 模块及其其他功能,请参阅 使用 apigee-access 模块

工作示例

假设在请求流路径上运行的 Edge 政策设置了一个名为 AuthenticatedUserId的变量。以下代码访问该变量并将其输出到 日志。此外,此代码还会设置一个变量。然后,您可以从政策访问该变量, 如下所示。

var http = require('http');
var apigee = require('apigee-access');

http.createServer(function (request, response) {
  // The request parameter must be a request object that came from the http module
  var userId = apigee.getVariable(request, 'AuthenticatedUserId');
  apigee.setVariable(request, "custom.foo", "Bar");
  console.log('Authenticated Apigee User ID is %s', userId);
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

您可以将此代码复制到 JavaScript 文件中,将其部署到 Edge 并进行试用。将该 文件 server.js 命名为。如需部署该文件,请使用:

apigeetool deploynodeapp -u username -p password -o myorg -e test -n access -d . -m server.js -b /access

将应用部署到 Edge 后,向 ProxyEndpoint 请求流添加具有以下 配置的 AssignMessage 政策:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="AddUserId">
    <DisplayName>AddUserId</DisplayName>
    <FaultRules/>
    <Properties/>  
    <AssignVariable>
        <Name>AuthenticatedUserId</Name>
        <Value>ntesla</Value>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

接下来,将另一个 AssignMessage 政策附加到 TargetEndpoint 响应 PreFlow:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="SetHeader">
    <DisplayName>SetHeader</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="MySpecialHeader">{custom.foo}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

您可以按如下方式调用代理:

curl -i http://myorg-test.apigee.net/access

现在,在管理界面中转到访问代理的页面,然后打开 开发 视图。点击 Node.js 日志 以查看 代理的日志输出。如果代理配置正确,您将看到 userId 变量已设置。 您还会在终端窗口的 c网址 输出中看到标头已设置:

HTTP/1.1 200 OK

Content-Type: text/plain
Date: Tue, 27 05 2014 23:20:52 GMT
MySpecialHeader: Bar
Content-Length: 12
Connection: keep-alive

方法


getVariable

var result = getVariable(httpRequest, name);

获取已命名的变量。

参数

  • httpRequest:来自 http 模块的请求对象。
  • name:(字符串)要检索的变量的名称。

返回

字符串或数字,具体取决于您在其他位置创建变量时使用 setVariable() 设置的类型,或者政策创建变量时设置的类型。如果您要访问其中一个 开箱即用的 Edge 变量,可以在变量参考中找到类型列表。如需了解政策创建的变量类型 ,请参阅特定政策参考主题。

示例

var apigee = require('apigee-access');
    // "httpRequest" must be a request object that came from the http module
    var val1 = apigee.getVariable(request, 'TestVariable');
    var val2 = apigee.getVariable(request, 'request.client.ip');

setVariable

setVariable(httpRequest, name, value);

设置变量。某些变量是只读变量,如果您尝试设置其中一个变量,setVariable() 方法会抛出 异常。如需确定哪些变量是只读变量,请参阅 变量 参考

参数

  • httpRequest:来自 http 模块的请求对象。
  • name:(字符串)要检索的变量的名称。
  • value:可以是数字、字符串、布尔值、null 或未定义。

示例

var apigee = require('apigee-access');
    apigee.setVariable(request, 'TestVariable', 'bar');
    // This will throw an exception because client.ip is read-only.
    apigee.setVariable(request, 'client.ip');
    

setIntVariable

setIntVariable(httpRequest, name, value);

setIntVariable() 方法是一种便捷方法,它首先将 value 参数强制转换为 整数,然后进行设置。

参数

  • httpRequest:来自 http 模块的请求对象。
  • name:(字符串)要设置的变量的名称。
  • value:value 参数必须是字符串或数字。

示例

var apigee = require('apigee-access');
// Convert "123" to an integer and set it
apigee.setIntVariable(request, 'TestVariable', '123');
// Use something that's already a number
apigee.setIntVariable(request, 'TestVariable2', 42);

deleteVariable

删除已命名的变量。删除只读变量会出错。如需查看只读变量的完整 列表,请参阅变量参考

deleteVariable(httpRequest, name);

参数

  • httpRequest:来自 http 模块的请求对象。
  • name:(字符串)要删除的变量的名称。

示例

  apigee.deleteVariable(request, 'TestVariable');
    // This will throw an exception because client.ip is a read-only variable.
    apigee.deleteVariable(request, 'client.ip');