您正在查看 Apigee Edge 文档。
转到 Apigee X 文档。 信息
简介
使用 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 后,请将具有以下配置的 AssignMessage 政策添加到 ProxyEndpoint 请求流:
<?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 响应前流:
<?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() 方法是一种便捷方法,它会先将值参数强制转换为整数,然后再进行设置。
参数:
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');