Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Edge Microgateway wer. 2.4.x
Odbiorcy
Ten temat jest przeznaczony dla programistów, którzy chcą rozszerzyć funkcje Edge Microgateway, pisząc niestandardowe wtyczki. Jeśli chcesz napisać nową wtyczkę, zapoznaj się z JavaScriptem i Node.js
Czym jest niestandardowa wtyczka Edge Microgateway?
Wtyczka to moduł Node.js, który zapewnia dodatkowe funkcje do Edge Microgateway. Moduły wtyczek są zgodne ze spójnym wzorcem i przechowywane w lokalizacji znanej Edge Microgateway, co umożliwia aby były wykrywane i uruchamiane automatycznie. Dostępnych jest kilka wstępnie zdefiniowanych wtyczek zainstalować Edge Microgateway. Są to między innymi wtyczki do uwierzytelniania, zatrzymania szczytu, limitu Analytics. Informacje o istniejących wtyczkach znajdziesz w artykule Korzystanie z wtyczek.
Możesz dodać do mikrobramy nowe funkcje i możliwości, wpisując custom Edge Microgateway to domyślnie bezpieczny, przekazujący serwer proxy, przekazuje niezmienione żądania i odpowiedzi do i z usług docelowych. Dzięki niestandardowym wtyczkom możesz: automatycznie wchodzą w interakcje z żądaniami i odpowiedziami, które przechodzą przez mikrobramę.
Gdzie umieścić kod wtyczki niestandardowej
Folder na potrzeby niestandardowych wtyczek jest dołączany do instalacji Edge Microgateway tutaj:
[prefix]/npm/lib/node_modules/edgemicro/plugins
gdzie [prefix] to katalog z prefiksem npm jako
opisane w sekcji „Gdzie jest zainstalowana Edge Microgateway” w instalacji Edge
Microgateway.
Możesz zmienić ten domyślny katalog wtyczek. Zobacz Dokąd znajdziesz wtyczki.
Sprawdzanie wstępnie zdefiniowanych wtyczek
Zanim utworzysz własną wtyczkę, sprawdź, czy żaden wstępnie zdefiniowany które spełniają wymagania. Te wtyczki znajdują się w:
[prefix]/npm/lib/node_modules/edgemicro/node_modules/microgateway-plugins
gdzie [prefix] to katalog prefiksów npm. Zobacz
też „Gdzie jest zainstalowana Edge Microgateway”. w sekcji Instalowanie Edge
Microgateway.
Szczegółowe informacje można znaleźć w artykule Wstępnie zdefiniowane i wtyczki udostępniane przez Edge Microgateway.
Napisanie prostej wtyczki
W tej sekcji omówimy kroki wymagane do utworzenia prostej wtyczki. Ta wtyczka zastępuje dane odpowiedzi (cokolwiek to jest) ciągiem „Hello, World!”, i drukuje ją na złącze.
- Jeśli Edge Microgateway jest uruchomiona, zatrzymaj ją teraz:
edgemicro stop
-
cddo katalogu wtyczek niestandardowych:cd [prefix]/npm/lib/node_modules/edgemicro/pluginsgdzie
[prefix]to katalog prefiksównpmzgodnie z opisem w sekcji „Gdzie zainstalowano Edge Microgateway” w instalacji Edge Microgateway. - Utwórz nowy projekt wtyczki
nazywane zastępowaniem odpowiedzi i
cd:
mkdir response-override && cd response-override
- Utwórz nowy projekt Node.js:
Aby zaakceptować wartości domyślne, kilka razy naciśnij klawisz Return.npm init
- W edytorze tekstu utwórz nowy plik o nazwie
index.js. - Skopiuj ten kod do usługi
index.jsi zapisz plik.
'use strict'; var debug = require('debug') module.exports.init = function(config, logger, stats) { return { ondata_response: function(req, res, data, next) { debug('***** plugin ondata_response'); next(null, null); }, onend_response: function(req, res, data, next) { debug('***** plugin onend_response'); next(null, "Hello, World!\n\n"); } }; }
- Masz już utworzoną wtyczkę, którą musisz dodać do konfiguracji Edge Microgateway.
Otwórz plik
$HOME/.edgemicro/[org]-[env]-config.yaml. gdzieorgienvto Twoja organizacja Edge nazw środowiska. - Dodaj wtyczkę
response-overridedoplugins:sequence, jak widać poniżej.
... plugins: dir: ../plugins sequence: - oauth - response-override ... - Uruchom ponownie Edge Microgateway.
- Wywołaj interfejs API za pomocą Edge Microgateway. (To wywołanie interfejsu API zakłada, że masz skonfigurowane
konfiguracji jak w samouczku na temat bezpieczeństwa klucza interfejsu API, zgodnie z opisem w sekcji Ustawienia
konfigurowanie i konfigurowanie Edge Microgateway:
curl -H 'x-api-key: uAM4gBSb6YoMvTHfx5lXJizYIpr5Jd' http://localhost:8000/hello/echo Hello, World!
Składnia wtyczki
Poniższa przykładowa wtyczka Edge Microgateway przedstawia wzorzec, który należy zastosować, gdy
tworzenia własnych wtyczek. Kod źródłowy przykładowej wtyczki omówionej w tej sekcji to
plugins/header-uppercase/index.js.
- Wtyczki to standardowe moduły NPM z
package.jsoniindex.jsw katalogu głównym folderu Dysku. - Wtyczka musi wyeksportować funkcję init().
- Funkcja init() przyjmuje trzy argumenty: config, logger, i statystyki. Argumenty te zostały opisane tutaj: Argumenty funkcji init() wtyczki.
- init() zwraca obiekt z modułami obsługi funkcji nazwanych, które są wywoływane gdy określone zdarzenia mają miejsce w trakcie realizacji żądania.
Funkcje obsługi zdarzeń
Wtyczka musi implementować niektóre lub wszystkie z tych funkcji obsługi zdarzeń. Wdrożenie zależy od Ciebie. Każda funkcja jest opcjonalna, a typowa wtyczka zostanie zaimplementowana przynajmniej podzbioru tych funkcji.
Moduły obsługi zdarzeń przepływu żądań
Te funkcje są wywoływane w przypadku zdarzeń żądania w Edge Microgateway.
onrequestondata_requestonend_requestonclose_requestonerror_request
funkcja onrequest
Wywoływane na początku żądania klienta. Ta funkcja jest uruchamiana, gdy pierwszy bajt to żądanie jest odbierane przez Edge Microgateway. Ta funkcja daje dostęp do nagłówków żądań, adres URL, parametry zapytania i metodę HTTP. Jeśli wywołujesz następny argument, podając prawdziwy pierwszy argument (np. wystąpienia błędu), przetwarzanie żądania zostanie zatrzymane, a żądanie docelowe nie zostanie zainicjowane.
Przykład:
onrequest: function(req, res, next) { debug('plugin onrequest'); req.headers['x-foo-request-start'] = Date.now(); next(); }
funkcja ondata_request
Wywoływane po otrzymaniu fragmentu danych od klienta. Przenosi żądania danych do następnej w sekwencji wtyczki. Wartość zwrócona z ostatniej wtyczki w sekwencji jest wysyłana do wartość docelową. Typowym zastosowaniem pokazanym poniżej jest przekształcenie danych żądania przed ich wysłaniem. do wartości docelowej.
Przykład:
ondata_request: function(req, res, data, next) { debug('plugin ondata_request ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
funkcja onend_request
Wywoływane po otrzymaniu od klienta wszystkich danych żądania.
Przykład:
onend_request: function(req, res, data, next) { debug('plugin onend_request'); next(null, data); }
Funkcja onclose_request
Wskazuje, że połączenie z klientem zostało zamknięte. Możesz użyć tej funkcji, gdy połączenie z klientem jest zawodne. Jest ona wywoływana, gdy połączenie gniazda z klientem jest zamknięto.
Przykład:
onclose_request: function(req, res, next) { debug('plugin onclose_request'); next(); }
Funkcja onerror_request
Wywoływane, jeśli podczas odbierania żądania klienta wystąpił błąd.
Przykład:
onerror_request: function(req, res, err, next) { debug('plugin onerror_request ' + err); next(); }
Moduły obsługi zdarzeń przepływu odpowiedzi
Te funkcje są wywoływane w przypadku zdarzeń odpowiedzi w Edge Microgateway.
onresponseondata_responseonend_responseonclose_responseonerror_response
Funkcja onresponse
Wywoływane na początku odpowiedzi docelowej. Ta funkcja jest uruchamiana, gdy pierwszy bajt Odpowiedź jest odebrana przez Edge Microgateway. Ta funkcja zapewnia dostęp do nagłówków odpowiedzi i kod stanu.
Przykład:
onresponse: function(req, res, next) { debug('plugin onresponse'); res.setHeader('x-foo-response-time', Date.now() - req.headers['x-foo-request-start']) next(); }
Funkcja ondata_response
Wywoływana, gdy z miejsca docelowego zostanie odebrany fragment danych.
Przykład:
ondata_response: function(req, res, data, next) { debug('plugin ondata_response ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
Funkcja onend_response
Wywoływane po odebraniu wszystkich danych odpowiedzi z celu.
Przykład:
onend_response: function(req, res, data, next) { debug('plugin onend_response'); next(null, data); }
Funkcja onclose_response
Wskazuje, że połączenie docelowe zostało zamknięte. Możesz użyć tej funkcji, gdy jest zawodne. Jest ona wywoływana, gdy połączenie gniazda z miejscem docelowym to zamknięto.
Przykład:
onclose_response: function(req, res, next) { debug('plugin onclose_response'); next(); }
Funkcja onerror_response
Wywoływane, jeśli wystąpił błąd podczas odbierania odpowiedzi docelowej.
Przykład:
onerror_response: function(req, res, err, next) { debug('plugin onerror_response ' + err); next(); }
Co musisz wiedzieć o funkcje obsługi zdarzeń wtyczki
Funkcje obsługi zdarzeń wtyczek są wywoływane w odpowiedzi na określone zdarzenia Edge Microgateway przetwarza dane żądanie do interfejsu API.
- Każdy z modułów obsługi funkcji init() (ondata_request, ondata_response itp.) musi wywołać wywołanie zwrotne next() po zakończeniu przetwarzania. Jeśli nie chcesz wywoła next(), przetwarzanie zostanie zatrzymane, a żądanie rozłączy się.
- Pierwszy argument funkcji next() może być błędem, który spowoduje żądania zakończenia przetwarzania.
- Moduły ondata_ i onend_ muszą wywołaj funkcję next() z drugim argumentem zawierającym dane do przekazania do wartości docelowej lub klienta. Ten argument może mieć wartość null, jeśli wtyczka buforuje i nie wystarczająco dużo danych, aby w danej chwili je przekształcić.
- Pamiętaj, że do obsługi wszystkich żądań i odpowiedzi używana jest jedna instancja wtyczki. Jeśli wtyczka chce zachować stan poszczególnych żądań między wywołaniami, może zapisać ten stan w pliku została dodana do podanego obiektu request. (req), którego czas trwania to czas trwania wywołania interfejsu API.
- Pamiętaj, by wykryć wszystkie błędy i wywołać funkcję next() z błędem. Jeśli nie wywołasz funkcji next(), wywołanie interfejsu API się zawiesi.
- Uważaj, aby nie wprowadzać wycieków pamięci, ponieważ może to mieć wpływ na ogólną wydajność Edge Microgateway i powodować awarię, jeśli zabraknie pamięci.
- Zachowaj zgodność z modelem Node.js i nie wykonuj zadań wymagających dużej mocy obliczeniowej w głównej , ponieważ może to negatywnie wpłynąć na wydajność Edge Microgateway.
Informacje o funkcji init() wtyczki
W tej sekcji opisano argumenty przekazywane do funkcja init(): config, logger, i statystyki.
konfiguracja
Obiekt konfiguracji uzyskany po scaleniu pliku konfiguracyjnego Edge Microgateway z
informacje pobierane z Apigee Edge, takie jak usługi i limity. Więcej
konfigurację wtyczki w tym obiekcie: config.<plugin-name>.
Aby dodać parametr konfiguracji o nazwie param i wartości:
foo do wtyczki o nazwie response-override, umieść
w pliku default.yaml:
response-override:
param: fooNastępnie możesz uzyskać dostęp do parametru w kodzie wtyczki w następujący sposób:
// Called when response data is received ondata_response: function(req, res, data, next) { debug('***** plugin ondata_response'); debug('***** plugin ondata_response: config.param: ' + config.param); next(null, data); },
W takim przypadku w danych wyjściowych debugowania wtyczki zobaczysz foo:
Sun, 13 Dec 2015 21:25:08 GMT plugin:response-override ***** plugin ondata_response: config.param: foo
rejestrator
Rejestrator systemowy. Używany obecnie rejestrator eksportuje te funkcje, gdzie można ciąg znaków, żądanie HTTP, odpowiedź HTTP lub wystąpienie błędu.
info(object, message)warn(object, message)error(object, message)
statystyki
Obiekt zawierający liczbę żądań, odpowiedzi, błędów i inne zbiorcze statystyki związane z żądaniami i odpowiedziami przechodzącymi przez instancję mikrobramki.
- treqErrors – liczba żądań docelowych z błędami.
- treqErrors – liczba odpowiedzi docelowych z błędami.
- statusCodes – obiekt zawierający kod odpowiedzi, który zlicza:
{
1: number of target responses with 1xx response codes
2: number of target responses with 2xx response codes
3: number of target responses with 3xx response codes
4: number of target responses with 4xx response codes
5: number of target responses with 5xx response codes
}
- żądania – łączna liczba żądań.
- responses – łączna liczba odpowiedzi.
- connections (połączenia) – liczba aktywnych połączeń docelowych.
Informacje o funkcji next()
Aby można było kontynuować przetwarzanie następnej zawartości, wszystkie metody wtyczki muszą wywoływać metodę next()
w serii (lub proces wtyczki zawiesi się). Pierwszy cykl życia żądania
jest wywoływana metoda onrequest(). Kolejna wywoływana metoda to
metodę ondata_request();
jednak funkcja ondata_request jest wywoływana tylko wtedy, gdy funkcja
zawiera dane, np. żądanie POST. Kolejna metoda nazywa się
będzie mieć wartość onend_request(), która jest wywoływana, gdy przetwarzanie żądania jest
. Funkcje onerror_* są wywoływane tylko w przypadku argumentu
i pozwalają na naprawienie błędów za pomocą niestandardowego kodu.
Załóżmy, że w żądaniu zostały wysłane dane, a funkcja ondata_request() jest wywoływana.
Zwróć uwagę, że funkcja wywołuje next() z 2 parametrami:
next(null, data);
Zgodnie z konwencją do przekazania informacji o błędzie jest używany pierwszy parametr, którego możesz następnie
w kolejnej funkcji w łańcuchu. Po ustawieniu na null jest to fałszywe
, uznamy, że nie ma błędów i przetwarzanie żądań powinno przebiegać normalnie. Jeśli
ten argument jest prawdziwy (np. obiekt Error), wówczas przetwarzanie żądania zostaje zatrzymane,
wysłane do celu.
Drugi parametr przekazuje dane żądania do następnej funkcji w łańcuchu. Jeśli nie
dodatkowe przetwarzanie, dane żądania są przekazywane bez zmian do miejsca docelowego interfejsu API.
Możesz jednak w ramach tej metody zmodyfikować dane żądania i przekazać zmodyfikowane
do grupy docelowej. Jeśli np. dane żądania są w formacie XML, a obiekt docelowy oczekuje kodu JSON,
możesz dodać do metody ondata_request() kod, który (a) zmieni wartość
Content-Type nagłówka żądania na application/json i konwertuje parametr
do pliku JSON w dowolny sposób (na przykład możesz użyć polecenia
Konwerter xml2json Node.js uzyskany z NPM).
Zobaczmy, jak mogłoby to wyglądać:
ondata_request: function(req, res, data, next) { debug('****** plugin ondata_request); var translated_data = parser.toJson(data); next(null, translated_data); },
W tym przypadku dane żądania (przyjmowane jako XML) są konwertowane do formatu JSON, a tag
przekształcone dane są przekazywane przez next() do następnej funkcji w żądaniu
łańcuch, przed przekazaniem do miejsca docelowego backendu.
Pamiętaj, że możesz dodać kolejną instrukcję debugowania, aby wydrukować przekształcone dane na potrzeby debugowania. w celach informacyjnych. Na przykład:
ondata_request: function(req, res, data, next) { debug('****** plugin ondata_request); var translated_data = parser.toJson(data); debug('****** plugin ondata_response: translated_json: ' + translated_json); next(null, translated_data); },
Informacje kolejność wykonania modułu obsługi wtyczki
Jeśli piszesz wtyczki do Edge Microgateway, musisz wiedzieć, w jakiej kolejności są wykonywane moduły obsługi zdarzeń.
Należy pamiętać, że określając sekwencję wtyczki w przeglądarce Edge Plik konfiguracji Microgateway, moduły obsługi żądań są wykonywane w kolejności rosnącej, podczas gdy moduły obsługi odpowiedzi wykonują w kolejności malejącej.
Poniższy przykład ma pomóc w zrozumieniu tej sekwencji wykonywania.
1. Utwórz 3 proste wtyczki
Przyjrzyjmy się wtyczce poniżej. Generuje tylko dane wyjściowe konsoli, gdy jej moduły obsługi zdarzeń pod tytułem
Wtyczka/plugin-1/index.js
module.exports.init = function(config, logger, stats) { return { onrequest: function(req, res, next) { console.log('plugin-1: onrequest'); next(); }, onend_request: function(req, res, data, next) { console.log('plugin-1: onend_request'); next(null, data); }, ondata_response: function(req, res, data, next) { console.log('plugin-1: ondata_response ' + data.length); next(null, data); }, onend_response: function(req, res, data, next) { console.log('plugin-1: onend_response'); next(null, data); } }; }
Rozważ utworzenie jeszcze dwóch
wtyczki plugin-2 i plugin-3 z tym samym kodem
(z wyjątkiem zmian console.log()
odpowiednio plugin-2 i plugin-3).
2. Sprawdź kod wtyczki
Wyeksportowane funkcje wtyczki
w <microgateway-root-dir>/plugins/plugin-1/index.js jest wydarzeniem
moduły obsługi, które są uruchamiane w określonych momentach podczas przetwarzania żądań i odpowiedzi. Dla:
Na przykład onrequest wykonuje pierwszy bajt nagłówków żądań
odebrane. Z kolei onend_response jest wykonywany po ostatnim bajcie odpowiedzi
danych.
Spójrz na moduł obsługi ondata_response – jest on wywoływany za każdym razem, gdy fragment danych odpowiedzi . Pamiętaj, że dane odpowiedzi nie zawsze są dostarczane w całości raz. Dane mogą być pobierane we fragmentach o dowolnej długości.
3. Dodaj wtyczki do sekwencja wtyczki
Kontynuując ten przykład, dodamy wtyczki do sekwencji wtyczek w Edge.
pliku konfiguracyjnego Microgateway (~./edgemicro/config.yaml) w następujący sposób. Sekwencja jest
są ważne. Określa kolejność wykonywania modułów obsługi wtyczek.
plugins:
dir: ../plugins
sequence:
- plugin-1
- plugin-2
- plugin-3
4. Sprawdzanie danych wyjściowych debugowania
Spójrzmy teraz na dane wyjściowe, które zostałyby wygenerowane po wywołaniu tych wtyczek. Istnieją warto zwrócić uwagę na kilka ważnych kwestii:
- Wtyczka sekwencja pliku konfiguracyjnego Edge Microgateway
(
~./edgemicro/config.yaml) określa kolejność, w jakiej moduły obsługi zdarzeń są . - Moduły obsługi żądań są wywoływane w kolejności rosnącej (w kolejności pojawiają się w sekwencji wtyczki (1, 2, 3).
- Moduły obsługi odpowiedzi są wywoływane w kolejności malejącej – 3, 2, 1.
- Moduł obsługi
ondata_responsejest wywoływany raz dla każdego fragmentu danych które pojawią się w późniejszym czasie. W tym przykładzie (dane wyjściowe pokazane poniżej) odbierają 2 fragmenty.
Oto przykładowe dane wyjściowe debugowania, które są generowane, gdy te 3 wtyczki są używane i wysyłane jest żądanie za pomocą Edge Microgateway. Zwróć tylko uwagę na kolejność wywoływania modułów obsługi:
plugin-1: onrequest plugin-2: onrequest plugin-3: onrequest plugin-1: onend_request plugin-2: onend_request plugin-3: onend_request plugin-3: ondata_response 931 plugin-2: ondata_response 931 plugin-1: ondata_response 931 plugin-3: ondata_response 1808 plugin-3: onend_response plugin-2: ondata_response 1808 plugin-2: onend_response plugin-1: ondata_response 1808 plugin-1: onend_response
Podsumowanie
Poznanie kolejności wywoływania modułów obsługi wtyczek jest bardzo ważne wdrożyć niestandardowe funkcje wtyczki, takie jak zbieranie i przekształcanie żądań lub odpowiedzi; i skalowalnych danych.
Pamiętaj tylko, że moduły obsługi żądań są wykonywane w kolejności, w której są uruchamiane wtyczki określone w pliku konfiguracyjnym Edge Microgateway, a moduły obsługi odpowiedzi są wykonywane w w odwrotnej kolejności.
Informacje o używaniu zmiennych globalnych we wtyczkach
Każde żądanie do Edge Microgateway jest wysyłane do tej samej instancji wtyczki. w związku z tym stan drugiego żądania od innego klienta zastąpi pierwsze. Jedynym bezpiecznym miejscem i zapisanie stanu wtyczki polega na zapisaniu stanu we właściwości w obiekcie żądania lub odpowiedzi (którym okres ważności jest ograniczony do okresu żądania).
Przepisywanie docelowych adresów URL we wtyczce
Dodano w wersji 2.3.3
Możesz dynamicznie zastąpić domyślny docelowy URL we wtyczce, modyfikując te zmienne we wtyczce code: req.targetHostname oraz req.targetPath.
Dodano w wersji 2.4.x
Możesz też zastąpić docelowy port punktu końcowego i wybrać HTTP lub HTTPS. Zmień te zmiennych we wtyczce kodu: req.targetPort i req.targetSecure. Do wybierz HTTPS i ustaw parametr req.targetSecure na wartość true (prawda). w przypadku HTTP: ustaw wartość false (fałsz). Jeśli ustawisz wartość req.targetSecure na true, zobacz tę dyskusję .
Przykładowe wtyczki
Te wtyczki są dostarczane wraz z instalacją Edge Microgateway. Znajdziesz je w Tutaj możesz zainstalować Edge Microgateway:
[prefix]/npm/lib/node_modules/edgemicro/plugins
gdzie [prefix] to katalog z prefiksem npm jako
opisane w sekcji „Gdzie jest zainstalowana Edge Microgateway” w instalacji Edge
Microgateway.
accumulate-request
Ta wtyczka gromadzi fragmenty danych z klienta do właściwości tablicy dołączonej do obiektu żądania. Po otrzymaniu wszystkich danych żądania tablica jest połączona z buforem. który jest następnie przekazywany do następnej wtyczki w sekwencji. Ta wtyczka powinna być pierwszą wtyczką w sekwencji, tak aby kolejne wtyczki otrzymywały dane dotyczące żądań.
module.exports.init = function(config, logger, stats) { function accumulate(req, data) { if (!req._chunks) req._chunks = []; req._chunks.push(data); } return { ondata_request: function(req, res, data, next) { if (data && data.length > 0) accumulate(req, data); next(null, null); }, onend_request: function(req, res, data, next) { if (data && data.length > 0) accumulate(req, data); var content = null; if (req._chunks && req._chunks.length) { content = Buffer.concat(req._chunks); } delete req._chunks; next(null, content); } }; }
accumulate-response
Ta wtyczka gromadzi fragmenty danych ze środowiska docelowego do właściwości tablicy dołączonej do obiektu odpowiedzi. Po otrzymaniu wszystkich danych odpowiedzi tablica jest połączona z buforem który jest następnie przekazywany do następnej wtyczki w sekwencji. Ponieważ ta wtyczka działa na przetwarzanych w odwrotnej kolejności, należy umieścić je jako ostatnią wtyczkę w kolejności.
module.exports.init = function(config, logger, stats) { function accumulate(res, data) { if (!res._chunks) res._chunks = []; res._chunks.push(data); } return { ondata_response: function(req, res, data, next) { if (data && data.length > 0) accumulate(res, data); next(null, null); }, onend_response: function(req, res, data, next) { if (data && data.length > 0) accumulate(res, data); var content = Buffer.concat(res._chunks); delete res._chunks; next(null, content); } }; }
wtyczka z nagłówkiem „uppercase”
Rozkłady Edge Microgateway zawierają przykładową wtyczkę
pod tytułem <microgateway-root-dir>/plugins/header-uppercase. Przykład
zawiera komentarze opisujące poszczególne moduły obsługi funkcji. Ten przykład zawiera proste dane
przekształcenie docelowej odpowiedzi oraz dodanie niestandardowych nagłówków do żądania i elementu docelowego klienta
.
Oto kod źródłowy
dla <microgateway-root-dir>/plugins/header-uppercase/index.js:
'use strict'; var debug = require('debug')('plugin:header-uppercase'); // required module.exports.init = function(config, logger, stats) { var counter = 0; return { // indicates start of client request // request headers, url, query params, method should be available at this time // request processing stops (and a target request is not initiated) if // next is called with a truthy first argument (an instance of Error, for example) onrequest: function(req, res, next) { debug('plugin onrequest'); req.headers['x-foo-request-id'] = counter++; req.headers['x-foo-request-start'] = Date.now(); next(); }, // indicates start of target response // response headers and status code should be available at this time onresponse: function(req, res, next) { debug('plugin onresponse'); res.setHeader('x-foo-response-id', req.headers['x-foo-request-id']); res.setHeader('x-foo-response-time', Date.now() - req.headers['x-foo-request-start']); next(); }, // chunk of request body data received from client // should return (potentially) transformed data for next plugin in chain // the returned value from the last plugin in the chain is written to the target ondata_request: function(req, res, data, next) { debug('plugin ondata_request ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }, // chunk of response body data received from target // should return (potentially) transformed data for next plugin in chain // the returned value from the last plugin in the chain is written to the client ondata_response: function(req, res, data, next) { debug('plugin ondata_response ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }, // indicates end of client request onend_request: function(req, res, data, next) { debug('plugin onend_request'); next(null, data); }, // indicates end of target response onend_response: function(req, res, data, next) { debug('plugin onend_response'); next(null, data); }, // error receiving client request onerror_request: function(req, res, err, next) { debug('plugin onerror_request ' + err); next(); }, // error receiving target response onerror_response: function(req, res, err, next) { debug('plugin onerror_response ' + err); next(); }, // indicates client connection closed onclose_request: function(req, res, next) { debug('plugin onclose_request'); next(); }, // indicates target connection closed onclose_response: function(req, res, next) { debug('plugin onclose_response'); next(); } }; }
przekształcanie wielkie litery
To ogólna wtyczka przekształcająca, którą można zmodyfikować, aby uzyskać według własnego uznania. Ten przykład po prostu przekształca odpowiedź i dane żądania na wielkimi literami.
*/ module.exports.init = function(config, logger, stats) { // perform content transformation here // the result of the transformation must be another Buffer function transform(data) { return new Buffer(data.toString().toUpperCase()); } return { ondata_response: function(req, res, data, next) { // transform each chunk as it is received next(null, data ? transform(data) : null); }, onend_response: function(req, res, data, next) { // transform accumulated data, if any next(null, data ? transform(data) : null); }, ondata_request: function(req, res, data, next) { // transform each chunk as it is received next(null, data ? transform(data) : null); }, onend_request: function(req, res, data, next) { // transform accumulated data, if any next(null, data ? transform(data) : null); } }; }
Dodatkowe samouczki dotyczące wtyczek
Zapoznaj się też z tymi samouczkami na blogu Apigee: