Uzyskiwanie dostępu do zmiennych przepływu w Node.js

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Wstęp

Moduł apigee-access umożliwia dostęp do zmiennych przepływu Apigee Edge w aplikacji Node.js. Moduł umożliwia uzyskiwanie, konfigurowanie i usuwanie zmiennych. Jest też wygodny sposób ustawiania zmiennej liczby całkowitej.

Zmienne przepływu występują w kontekście procesu serwera proxy interfejsu API. Niektóre zmienne są „wbudowane” w Edge. Inne są tworzone w momencie wykonywania zasad, a Ty możesz tworzyć własne zmienne. Zmienne przepływu służą zwykle do przekazywania danych między zasadami oraz do określania warunków w przepływach warunkowych. Informacje o zmiennych przepływu znajdziesz w artykule Zmienne i warunki przepływu.

Wprowadzenie do modułu apigee-access i jego innych funkcji znajdziesz w artykule Korzystanie z modułu dostępu apigee.

Działający przykład

Załóżmy, że zasada brzegowa uruchomiona w ścieżce przepływu żądania ustawia zmienną o nazwie AuthenticatedUserId. Poniższy kod uzyskuje dostęp do tej zmiennej i wyświetla ją w logu. Dodatkowo kod ten ustawia zmienną. Następnie możesz uzyskać dostęp do tej zmiennej z poziomu zasady, co pokazano poniżej.

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/');

Możesz skopiować ten kod do pliku JavaScript, wdrożyć go w Edge i wypróbować. Wywołaj plik server.js. Aby je wdrożyć, użyj:

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

Po wdrożeniu aplikacji w Edge dodaj do przepływu żądania ProxyEndpoint zasadę AssignMessage z następującą konfiguracją:

<?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>

Następnie dołącz inną zasadę AssignMessage do wstępnego przepływu odpowiedzi 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>

Możesz wywołać serwer proxy w ten sposób:

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

Teraz otwórz stronę serwera proxy dostępu w interfejsie zarządzania i wyświetl widok Develop. Kliknij Logi Node.js, aby wyświetlić dane wyjściowe logów z serwera proxy. Jeśli serwer proxy jest skonfigurowany poprawnie, zobaczysz, że zmienna userId została ustawiona. W oknie terminala w wynikach cURL zobaczysz też, że nagłówek został ustawiony:

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

Metody


getVariable

var result = getVariable(httpRequest, name);

Pobiera zmienną nazwaną.

Parametry:

  • httpRequest: obiekt żądania pochodzący z modułu http.
  • name: (ciąg znaków) nazwa zmiennej do pobrania.

Zwraca:

Ciąg lub liczba, w zależności od typu ustawionego za pomocą funkcji setZmiennej, czasu utworzenia przez Ciebie w innym miejscu lub czasu utworzenia przez zasadę. Jeśli korzystasz z jednej z gotowych zmiennych Edge, listę typów znajdziesz w dokumentacji zmiennych. Typy zmiennych utworzone przez zasady znajdziesz w temacie dotyczącym konkretnych zasad.

Przykłady:

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);

Ustawia zmienną. Niektóre zmienne są tylko do odczytu, a metoda setZmienna() zgłasza wyjątek, jeśli spróbujesz którąś z nich ustawić. Aby określić, które zmienne są tylko do odczytu, zapoznaj się z dokumentacją zmiennych.

Parametry:

  • httpRequest: obiekt żądania pochodzący z modułu http.
  • name: (ciąg znaków) nazwa zmiennej do pobrania.
  • value: może być liczbą, ciągiem znaków, wartością logiczną, wartością null lub niezdefiniowaną.

Przykład:

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, nazwa, wartość);

Metoda setIntVariable() to wygodna metoda, która najpierw zmienia parametr value na liczbę całkowitą, a następnie ustawia go.

Parametry:

  • httpRequest: obiekt żądania pochodzący z modułu http.
  • name: (ciąg znaków) nazwa zmiennej do ustawienia.
  • value: parametr wartości musi być ciągiem znaków lub liczbą.

Przykład:

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

Usuwa zmienną nazwaną. Usunięcie zmiennej tylko do odczytu jest błędem. Pełną listę zmiennych tylko do odczytu znajdziesz w dokumentacji zmiennych.

deleteVariable(httpRequest, name);

Parametry:

  • httpRequest: obiekt żądania pochodzący z modułu http.
  • name: (ciąg znaków) nazwa zmiennej do usunięcia.

Przykład:

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