Доступ к переменным потока в Node.js

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Введение

Используйте модуль apigee-access для доступа к переменным потока Apigee Edge в приложении Node.js. Модуль имеет методы для получения , установки и удаления переменных. Он также имеет удобный метод установки целочисленной переменной .

Переменные потока существуют в контексте потока прокси 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 установлена. Вы также увидите, что заголовок был установлен в выводе cURL в окне терминала:

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

Методы


получить переменную

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 : может быть числом, строкой, логическим значением, нулевым значением или неопределенным.

Пример:

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, имя, значение);

Метод 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(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');