<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Edge Microgateway Version 3.1.5 und höher
Zielgruppe
Dieses Thema richtet sich an Entwickler, die Edge Microgateway-Features durch benutzerdefinierten Plug-ins. Wenn Sie ein neues Plug-in schreiben möchten, sollten Sie mit JavaScript und Node.js vertraut sein erforderlich.
Was ist ein benutzerdefiniertes Edge Microgateway-Plug-in?
Ein Plug-in ist ein Node.js-Modul, das Edge Microgateway um Funktionen ergänzt. Plug-in-Module einem einheitlichen Muster folgen und an einem Edge Microgateway bekannten Speicherort gespeichert werden, dass sie erkannt und automatisch ausgeführt werden. Wenn Sie eine der folgenden Optionen nutzen, stehen Ihnen mehrere vordefinierte Plug-ins zur Verfügung: Edge Microgateway installieren. Dazu gehören Plug-ins für Authentifizierung, Spike Arrest, Kontingent- und Analytics. Diese vorhandenen Plug-ins werden unter Plug-ins verwenden beschrieben.
Sie können dem Microgateway neue Funktionen hinzufügen, indem Sie custom . Standardmäßig ist Edge Microgateway im Wesentlichen ein sicherer Passthrough-Proxy, übergibt Anfragen und Antworten unverändert an und von Zieldiensten. Mit benutzerdefinierten Plug-ins können Sie programmatisch mit den Anfragen und Antworten interagieren, die über das Microgateway fließen.
Benutzerdefinierten Plug-in-Code einfügen
Die Edge Microgateway-Installation enthält einen Ordner für benutzerdefinierte Plug-ins hier:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
Dabei ist [prefix]
das npm
-Präfixverzeichnis als
beschrieben in „Wo ist Edge Microgateway installiert?“ in Edge installieren
Microgateway
Sie können dieses Standard-Plug-in-Verzeichnis ändern. Weitere Informationen finden Sie unter .
Vordefinierte Plug-ins überprüfen
Bevor Sie versuchen, Ihr eigenes Plug-in zu entwickeln, überprüfen Sie am besten, ob keine der vordefinierten die Ihren Anforderungen entsprechen. Diese Plug-ins befinden sich hier:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
Dabei ist [prefix]
das Präfixverzeichnis npm
. Weitere Informationen finden Sie unter
auch „Wo ist Edge Microgateway installiert?“ in Edge installieren
Microgateway
Weitere Informationen finden Sie unter Vordefinierte mit Edge Microgateway bereitgestellte Plug-ins.
Einfaches Plug-in schreiben
In diesem Abschnitt werden die Schritte zum Erstellen eines einfachen Plug-ins erläutert. Dieses Plug-in überschreibt die Antwortdaten (was auch immer sie sind) mit der Zeichenfolge "Hello, World!" und druckt sie im .
- Wenn Edge Microgateway ausgeführt wird, beenden Sie es jetzt:
edgemicro stop
-
cd
in das benutzerdefinierte Plug-in-Verzeichnis:cd [prefix]/lib/node_modules/edgemicro/plugins
wobei
[prefix]
das Präfixverzeichnisnpm
ist wie unter "Wo ist Edge Microgateway installiert ist" beschrieben in Edge installieren Microgateway - Erstellen Sie ein neues Plug-in-Projekt mit dem Namen response-override und
cd
. hinzufügen:
mkdir response-override && cd response-override
- Erstellen Sie ein neues Node.js-Projekt:
Drücken Sie mehrmals auf die Eingabetaste, um die Standardeinstellungen zu übernehmen.npm init
- Erstellen Sie mit einem Texteditor eine neue Datei namens
index.js
. - Kopieren Sie den folgenden Code in
index.js
und speichern Sie die Datei.
'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"); } }; }
- Jetzt haben Sie ein Plug-in erstellt und müssen es der Edge Microgateway-Konfiguration hinzufügen.
Öffnen Sie die Datei
$HOME/.edgemicro/[org]-[env]-config.yaml
, wobeiorg
undenv
sind die Namen Ihrer Edge-Organisation und Ihrer Umgebung. - Fügen Sie dem Element
plugins:sequence
das Plug-inresponse-override
hinzu wie unten dargestellt.
... plugins: dir: ../plugins sequence: - oauth - response-override ...
- Starten Sie Edge Microgateway neu.
- API über Edge Microgateway aufrufen. Bei diesem API-Aufruf wird davon ausgegangen, dass Sie
Konfiguration als Anleitung mit der Sicherheit des API-Schlüssels, wie unter Einrichten der
und Edge Microgateway konfigurieren:
curl -H 'x-api-key: uAM4gBSb6YoMvTHfx5lXJizYIpr5Jd' http://localhost:8000/hello/echo Hello, World!
Aufbau eines Plug-ins
Das folgende Edge Microgateway-Beispiel-Plug-in veranschaulicht das Muster, das beim
die Entwicklung eigener Plug-ins. Der Quellcode für das in diesem Abschnitt beschriebene Beispiel-Plug-in ist
im plugins/header-uppercase/index.js.
- Plug-ins sind Standard-NPM-Module mit einem
package.json
undindex.js
im Stammordner. - Ein Plug-in muss eine init()-Funktion exportieren.
- Die Funktion init() verwendet drei Argumente: config, logger und stats. Diese Argumente werden im Plug-in init()-Funktionsargumente.
- init() gibt ein Objekt mit benannten Funktions-Handlern zurück, die aufgerufen werden, wenn bestimmte Ereignisse während der Lebensdauer einer Anfrage auftreten.
Event-Handler-Funktionen
Ein Plug-in muss einige oder alle dieser Event-Handler-Funktionen implementieren. Implementierung welche Funktionen Sie nutzen. Jede gegebene Funktion ist optional und ein typisches Plug-in wird unter zumindest eine Teilmenge dieser Funktionen.
Flow-Event-Handler anfordern
Diese Funktionen werden bei Anfrageereignissen in Edge Microgateway aufgerufen.
onrequest
ondata_request
onend_request
onclose_request
onerror_request
onrequest
-Funktion
Wird zu Beginn der Clientanfrage aufgerufen. Diese Funktion wird ausgelöst, wenn das erste Byte des Anfrage wird von Edge Microgateway empfangen. Mit dieser Funktion erhalten Sie Zugriff auf die Anfrageheader, URL, Suchparameter und HTTP-Methode. Wenn Sie "Next" mit dem ersten Argument der Wahrheit (z. B. Fehlerinstanz), wird die Verarbeitung der Anfrage gestoppt und es wird keine Zielanfrage initiiert.
Beispiel:
onrequest: function(req, res, next) { debug('plugin onrequest'); req.headers['x-foo-request-start'] = Date.now(); next(); }
ondata_request
-Funktion
Wird aufgerufen, wenn ein Datenblock vom Client empfangen wird. Übergibt Anfragedaten an die nächste in der Plug-in-Sequenz ein. Der vom letzten Plug-in in der Sequenz zurückgegebene Wert wird an das Ziel zu erreichen. Ein typischer Anwendungsfall (siehe unten) ist die Transformation der Anfragedaten vor dem Senden zum Ziel hin.
Beispiel:
ondata_request: function(req, res, data, next) { debug('plugin ondata_request ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
onend_request
-Funktion
Wird aufgerufen, wenn alle Anfragedaten vom Client empfangen wurden.
Beispiel:
onend_request: function(req, res, data, next) { debug('plugin onend_request'); next(null, data); }
onclose_request
-Function
Gibt an, dass die Clientverbindung beendet wurde. Sie können diese Funktion verwenden, wenn der Clientverbindung ist unzuverlässig. Sie wird aufgerufen, wenn die Socket-Verbindung zum Client geschlossen.
Beispiel:
onclose_request: function(req, res, next) { debug('plugin onclose_request'); next(); }
onerror_request
-Function
Wird aufgerufen, wenn beim Empfang der Clientanfrage ein Fehler auftritt.
Beispiel:
onerror_request: function(req, res, err, next) { debug('plugin onerror_request ' + err); next(); }
Ereignis-Handler für Antwortfluss
Diese Funktionen werden bei Antwortereignissen in Edge Microgateway aufgerufen.
onresponse
ondata_response
onend_response
onclose_response
onerror_response
onresponse
-Function
Wird zu Beginn der Zielantwort aufgerufen. Diese Funktion wird ausgelöst, wenn das erste Byte des Antwort wird von Edge Microgateway empfangen. Mit dieser Funktion erhalten Sie Zugriff auf die Antwortheader und den Statuscode.
Beispiel:
onresponse: function(req, res, next) { debug('plugin onresponse'); res.setHeader('x-foo-response-time', Date.now() - req.headers['x-foo-request-start']) next(); }
ondata_response
-Funktion
Wird aufgerufen, wenn ein Datenblock vom Ziel empfangen wird.
Beispiel:
ondata_response: function(req, res, data, next) { debug('plugin ondata_response ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
onend_response
-Funktion
Wird aufgerufen, wenn alle Antwortdaten vom Ziel empfangen wurden.
Beispiel:
onend_response: function(req, res, data, next) { debug('plugin onend_response'); next(null, data); }
onclose_response
-Function
Gibt an, dass die Zielverbindung beendet wurde. Sie können diese Funktion verwenden, wenn der Zielverbindung ist unzuverlässig. Sie wird aufgerufen, wenn die Socket-Verbindung zum Ziel geschlossen.
Beispiel:
onclose_response: function(req, res, next) { debug('plugin onclose_response'); next(); }
onerror_response
-Funktion
Wird aufgerufen, wenn beim Empfang der Zielantwort ein Fehler auftritt.
Beispiel:
onerror_response: function(req, res, err, next) { debug('plugin onerror_response ' + err); next(); }
Was Sie über die Plug-in-Event-Handler-Funktionen
Plug-in-Event-Handler-Funktionen werden als Reaktion auf bestimmte Ereignisse aufgerufen, die während Edge Microgateway verarbeitet eine bestimmte API-Anfrage.
- Jeder der init()-Funktions-Handler (ondata_request, ondata_response usw.) muss nach Abschluss den next()-Callback aufrufen. Datenverarbeitung. Wenn Sie next() nicht aufrufen, wird die Verarbeitung beendet und die Anfrage hängt.
- Das erste Argument für next() kann ein Fehler sein, der zu einer Anfrage führt. zu beenden.
- Die Handler ondata_ und onend_ müssen next() mit einem zweiten Argument mit den Daten, die an das Ziel übergeben werden sollen. oder der Kundschaft. Dieses Argument kann null sein, wenn das Plug-in eine Zwischenspeicherung durchführt und nicht genügend Daten zur Verfügung stehen, um sich im Moment zu verändern.
- Beachten Sie, dass eine einzelne Instanz des Plug-ins verwendet wird, um alle Anfragen und Antworten zu bearbeiten. Möchte ein Plug-in den anfragespezifischen Status zwischen den Aufrufen beibehalten, kann es diesen Status in einem dem bereitgestellten request-Objekt (req) hinzugefügt, dessen Lebensdauer ist die Dauer des API-Aufrufs.
- Achten Sie darauf, dass alle Fehler abgefangen werden, und rufen Sie next() mit dem Fehler auf. Fehler bei next() aufruft, dazu führt, dass der API-Aufruf ausgesetzt wird.
- Achten Sie darauf, keine Speicherlecks zu verursachen, da dies die Gesamtleistung von Edge beeinträchtigen kann. Microgateway verwenden und es zum Absturz bringen, wenn der Arbeitsspeicher ausgeht.
- Achten Sie darauf, dem Node.js-Modell zu folgen und keine rechenintensiven Aufgaben in der Haupt- Thread, da dies die Leistung von Edge Microgateway beeinträchtigen kann.
Über die Funktion „init()“ des Plug-ins
In diesem Abschnitt werden die Argumente beschrieben, die an die Funktion init() übergeben werden: config, logger und stats.
config
Konfigurationsdaten, die durch Zusammenführen der Edge Microgateway-Konfigurationsdatei mit
Die von Apigee Edge heruntergeladenen Daten werden in einem Objekt namens config
abgelegt.
So fügen Sie einen Konfigurationsparameter param mit dem Wert foo hinzu.
in das Plug-in response-override, fügen Sie diesen im default.yaml
ein.
Datei:
response-override: param: foo
Anschließend können Sie wie folgt auf den Parameter im Plug-in-Code zugreifen:
// 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); },
In diesem Fall wird in der Debug-Ausgabe des Plug-ins "foo" ausgegeben:
Sun, 13 Dec 2015 21:25:08 GMT plugin:response-override ***** plugin ondata_response: config.param: foo
Ich
auf die zusammengeführte Microgateway-Konfiguration zugreifen und Apigee Edge-Daten im
untergeordnetes Objekt config.emgConfigs
. Beispiel:
können Sie in der Funktion init
auf diese Konfigurationsdaten zugreifen.
wie folgt:
module.exports.init = function(config, logger, stats) { let emgconfigs = config.emgConfigs;
Im Folgenden finden Sie ein Beispiel für Daten, die in emgConfigs
enthalten sind:
{ edgemicro: { port: 8000, max_connections: 1000, config_change_poll_interval: 600, logging: { level: 'error', dir: '/var/tmp', stats_log_interval: 60, rotate_interval: 24, stack_trace: false }, plugins: { sequence: [Array] }, global: { org: 'Your Org', env: 'test' } }, headers: { 'x-forwarded-for': true, 'x-forwarded-host': true, 'x-request-id': true, 'x-response-time': true, via: true }, proxies: [ { max_connections: 1000, name: 'edgemicro_delayed', revision: '1', proxy_name: 'default', base_path: '/edgemicro_delayed', target_name: 'default', url: 'https://httpbin.org/delay/10', timeout: 0 } ], product_to_proxy: { EdgeMicroTestProduct: [ 'edgemicro-auth','edgemicro_delayed',] }, product_to_scopes: {prod4: [ 'Admin', 'Guest', 'Student' ] }, product_to_api_resource: { EdgeMicroTestProduct: [ '/*' ] }, _hash: 0, keys: { key: 'Your key', secret: 'Your key ' }, uid: 'Internally generated uuid', targets: [] }
logger
Der Systemprotokoll. Der aktuell verwendete Logger exportiert diese Funktionen, wobei das Objekt ein String, eine HTTP-Anfrage, eine HTTP-Antwort oder eine Fehlerinstanz.
info(object, message)
warn(object, message)
error(object, message)
trace(object, message)
debug(object, message)
Statistiken
Ein Objekt, das die Anzahl der Anfragen, Antworten, Fehler und andere aggregierte Statistiken enthält zu den Anfragen und Antworten, die über eine Microgateway-Instanz gesendet werden.
- treqErrors: Anzahl der Zielanfragen mit Fehlern.
- treqErrors – Anzahl der Zielantworten mit Fehlern.
- statusCodes – Ein Objekt mit Antwortcode wird gezählt:
{ 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 }
- requests – Die Gesamtzahl der Anfragen.
- responses – Die Gesamtzahl der Antworten.
- connections – Die Anzahl der aktiven Zielverbindungen.
Über die Funktion next()
Alle Plug-in-Methoden müssen next()
aufrufen, um die Verarbeitung der nächsten Methode im
(sonst hängt der Plug-in-Prozess auf). Die erste aufgerufene Methode im Anfragelebenszyklus
onrequest() Die nächste Methode, die aufgerufen werden soll, ist die Methode ondata_request()
. Allerdings
ondata_request
wird nur aufgerufen, wenn die Anfrage Daten enthält, wie in
z. B. einer POST-Anfrage. Die nächste aufgerufene Methode ist
onend_request()
, der nach Abschluss der Anfrageverarbeitung aufgerufen wird. Die
onerror_*
-Funktionen werden nur im Fehlerfall aufgerufen und ermöglichen Folgendes:
können Sie die Fehler bei Bedarf
mit benutzerdefiniertem Code verarbeiten.
Angenommen, Daten werden in der Anfrage gesendet und ondata_request()
wird aufgerufen. Hinweis
dass die Funktion next()
mit zwei Parametern aufruft:
next(null, data);
Konventionsgemäß wird der erste Parameter verwendet, um Fehlerinformationen zu übermitteln, die Sie dann
Handle in einer nachfolgenden Funktion in der Kette ab. Wenn Sie es auf null
setzen,
angeben, dass keine Fehler vorliegen und die Anfrageverarbeitung normal fortgesetzt werden sollte. Wenn
ist dieses Argument wahrheitsgemäß (z. B. ein Fehlerobjekt), dann wird die Verarbeitung der Anforderung beendet und die Anforderung wird
an das Ziel gesendet werden.
Der zweite Parameter übergibt die Anfragedaten an die nächste Funktion in der Kette. Wenn Sie keine
werden die Anfragedaten unverändert an das Ziel der API übergeben.
Sie haben jedoch die Möglichkeit, die Anfragedaten innerhalb dieser Methode zu ändern und die geänderten
an das Ziel zu senden. Wenn die Anforderungsdaten beispielsweise XML sind und das Ziel JSON erwartet,
können Sie der Methode ondata_request()
Code hinzufügen, mit dem (a)
Content-Type des Anfrageheaders in application/json
und konvertiert die Anfragedaten
in JSON mit jeder beliebigen Methode (z. B. Node.js)
xml2json-Konverter aus NPM).
Das könnte so aussehen:
ondata_request: function(req, res, data, next) { debug('****** plugin ondata_request'); var translated_data = parser.toJson(data); next(null, translated_data); },
In diesem Fall werden die Anforderungsdaten (von denen angenommen wird, dass sie im XML-Format vorliegen) in JSON konvertiert und der
transformierte Daten über next()
an die nächste Funktion in der Anfragekette übergeben.
bevor sie an das Back-End-Ziel übergeben werden.
Sie können eine weitere Debug-Anweisung hinzufügen, um die transformierten Daten für das Debugging auszugeben. zu verstehen. Beispiel:
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); },
Info Ausführungsreihenfolge für Plug-in-Handler
Wenn Sie Plug-ins für Edge Microgateway schreiben, müssen Sie die Reihenfolge verstehen, ausgeführt werden.
Wichtig ist, dass Sie beim Angeben einer Plug-in-Sequenz in Edge Microgateway-Konfigurationsdatei werden die Anfrage-Handler in aufsteigender Reihenfolge ausgeführt, während die Antwort-Handler in absteigender Reihenfolge ausgeführt werden.
Das folgende Beispiel soll Ihnen helfen, diese Ausführungssequenz zu verstehen.
1. Erstellen Sie drei einfache Plug-ins
Sehen Sie sich das folgende Plug-in an. Es wird lediglich die Konsolenausgabe ausgegeben, wenn die Event-Handler mit dem Namen:
plugins/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); } }; }
Erwägen Sie nun, zwei weitere Plug-ins, plugin-2
und plugin-3
, mit
denselben Code (ändere die console.log()
-Anweisungen jedoch in plugin-2
)
bzw. plugin-3
).
2. Plug-in-Code überprüfen
Das exportierte Plug-in funktioniert in
<microgateway-root-dir>/plugins/plugin-1/index.js
sind Event-Handler, die
zu bestimmten Zeiten während der
Anfrage- und Antwortverarbeitung ausgeführt werden. Beispiel:
onrequest
führt das erste Byte der empfangenen Anfrageheader aus. Während
onend_response
wird ausgeführt, nachdem das letzte Byte der Antwortdaten empfangen wurde.
Sehen Sie sich den Handler ondata_response an. Er wird immer dann aufgerufen, wenn ein Teil der Antwortdaten empfangen wird. Wichtig zu wissen ist, dass die Antwortdaten nicht unbedingt einmal. Stattdessen können die Daten in Blöcken beliebiger Länge empfangen werden.
3. Plug-ins hinzufügen zu Plug-in-Sequenz
Wenn wir mit diesem Beispiel fortfahren, fügen wir die Plug-ins zur Plug-in-Sequenz in Edge hinzu.
Microgateway-Konfigurationsdatei (~./edgemicro/config.yaml
) folgendermaßen: Die Reihenfolge ist
wichtig. Er definiert die Reihenfolge, in der die Plug-in-Handler ausgeführt werden.
plugins: dir: ../plugins sequence: - plugin-1 - plugin-2 - plugin-3
4. Debug-Ausgabe untersuchen
Werfen wir nun einen Blick auf die Ausgabe, die erzeugt wird, wenn diese Plug-ins aufgerufen werden. Es gibt Beachten Sie die folgenden wichtigen Punkte:
- Die Plug-in-Sequenz der Edge Microgateway-Konfigurationsdatei
(
~./edgemicro/config.yaml
) gibt die Reihenfolge an, in der Event-Handler ausgeführt werden. aufgerufen. - Request-Handler werden in aufsteigender Reihenfolge aufgerufen, d. h. in der Reihenfolge, in der sie in der Plug-in-Sequenz - 1, 2, 3).
- Antwort-Handler werden in absteigender Reihenfolge aufgerufen: 3, 2, 1.
- Der
ondata_response
-Handler wird für jeden Datenblock, der kommt. In diesem Beispiel (siehe unten) werden zwei Blöcke empfangen.
Hier sehen Sie ein Beispiel für eine Debug-Ausgabe, die generiert wird, wenn diese drei Plug-ins verwendet werden und eine Anfrage gesendet wird über Edge Microgateway. Beachten Sie die Reihenfolge, in der die Handler aufgerufen werden:
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
Zusammenfassung
Es ist sehr wichtig zu verstehen, in welcher Reihenfolge Plug-in-Handler aufgerufen werden, wenn Sie versuchen, Benutzerdefinierte Plug-in-Funktionen implementieren, z. B. zum Sammeln und Umwandeln von Anfragen oder Antworten Daten.
Denken Sie daran, dass Anfrage-Handler in der Reihenfolge ausgeführt werden, in der die Plug-ins die in der Edge Microgateway-Konfigurationsdatei angegeben sind, und Antwort-Handler werden im in entgegengesetzter Reihenfolge.
Globale Variablen in Plug-ins verwenden
Jede Anfrage an Edge Microgateway wird an dieselbe Instanz eines Plug-ins gesendet. Daher ist ein Der Status der zweiten Anfrage von einem anderen Client überschreibt den ersten. Der einzige sichere Ort, an dem Das Speichern des Plug-in-Status besteht darin, den Status in einer Eigenschaft des Anfrage- oder Antwortobjekts zu speichern, dessen Lebensdauer ist auf die der Anfrage beschränkt.
Umschreiben von Ziel-URLs in Plug-ins
Hinzugefügt in: v2.3.3
Sie können die Standard-Ziel-URL in einem Plug-in dynamisch überschreiben, indem Sie diese Variablen ändern. im Plug-in-Code: req.targetHostname und req.targetPath.
Hinzugefügt in: v2.4.x
Sie können auch den Port des Zielendpunkts überschreiben und zwischen HTTP und HTTPS wählen. Ändern Variablen im Plug-in-Code: req.targetPort und req.targetSecure. Um HTTPS auszuwählen, setzen Sie req.targetSecure auf true; für HTTP auf false setzen. Wenn Sie req.targetSecure auf wahr, siehe diese Diskussion .
Beispiel-Plug-ins
Diese Plug-ins werden mit Ihrer Edge Microgateway-Installation bereitgestellt. Sie finden sie in der Edge Microgateway-Installation hier:
[prefix]/lib/node_modules/edgemicro/plugins
Dabei ist [prefix]
das npm
-Präfixverzeichnis als
beschrieben in „Wo ist Edge Microgateway installiert?“ in Edge installieren
Microgateway
accumulate-request
Dieses Plug-in sammelt Datenblöcke vom Client in einer Array-Eigenschaft, die dem request-Objekts. Wenn alle Anfragedaten empfangen wurden, wird das Array zu einem Zwischenspeicher verkettet. das dann an das nächste Plug-in in der Sequenz übergeben wird. Dieses Plug-in sollte das erste Plug-in sein. in der Sequenz, damit nachfolgende Plug-ins die akkumulierten Anfragedaten erhalten.
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
Dieses Plug-in sammelt Datenblöcke vom Ziel in einer Array-Eigenschaft, die dem -Antwortobjekt. Wenn alle Antwortdaten empfangen wurden, wird das Array zu einem Zwischenspeicher verkettet. das dann an das nächste Plug-in in der Sequenz übergeben wird. Da dieses Plug-in in Antworten, die in umgekehrter Reihenfolge verarbeitet werden, in der Sequenz an.
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); } }; }
Plug-in mit großem Anfangsbuchstaben
Edge Microgateway-Distributionen enthalten ein Beispiel-Plug-in namens
<microgateway-root-dir>/plugins/header-uppercase
Das Beispiel enthält Kommentare
die die einzelnen Funktions-Handler beschreiben. In diesem Beispiel erfolgt eine einfache Datentransformation des
target -Antwort und fügt der Clientanfrage und der Zielantwort benutzerdefinierte Header hinzu.
Hier ist der Quellcode für
<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(); } }; }
Großschreibung umwandeln
Dies ist ein allgemeines Transformations-Plug-in, das Sie für die Sie sich wünschen. In diesem Beispiel werden die Antwort- und Anfragedaten in Großbuchstaben.
*/ 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); } }; }