Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Edge Microgateway v. 3.3.x
Kitle
Bu konu, bir e-posta yazarak Edge Microgateway özelliklerini genişletmek isteyen geliştiricilere yöneliktir ekleyebilirsiniz. Yeni bir eklenti yazmak istiyorsanız, JavaScript ve Node.js deneyiminiz gereklidir.
Özel Edge Microgateway eklentisi nedir?
Eklentiler, Edge Microgateway'e işlev ekleyen bir Node.js modülüdür. Eklenti modülleri tutarlı bir kalıp izler ve Edge Microgateway tarafından bilinen bir konumda saklanır. otomatik olarak keşfedilmelerini sağlar. Farklı bir eklenti kullanıyorsanız Edge Microgateway'i yükleyin. Bunlar, kimlik doğrulama, artış durdurma, kota ve Analytics'ten ulaşabilirsiniz. Bu mevcut eklentiler, Eklentileri kullanma bölümünde açıklanmaktadır.
Özel etiketler yazarak mikro ağ geçidine yeni özellikler ve yetenekler ekleyebilirsiniz: ekleyebilirsiniz. Varsayılan olarak Edge Mikro Ağ Geçidi aslında bir güvenlik anahtarıdır. Hedef hizmetlere ve hizmetlerden gelen istekler ve yanıtları değiştirmeden iletir. Özel eklentilerle şunları yapabilirsiniz: bu istek ve yanıtlarla programatik olarak etkileşime girer.
Özel eklenti kodu nereye yerleştirilir?
Edge Microgateway kurulumunun parçası olarak özel eklentiler için bir klasör eklenir buradan inceleyebilirsiniz:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
burada [prefix]
, aşağıdaki gibi npm
ön ek dizinidir:
"Edge Microgateway'in yüklü olduğu yerler" Edge'yi Yükleme'de
Mikro ağ geçidi.
Bu varsayılan eklenti dizinini değiştirebilirsiniz. Nerede bulunur? eklentileri hakkında daha fazla bilgi edinin.
Önceden tanımlanmış eklentileri inceleme
Kendi eklentinizi geliştirmeye çalışmadan önce, gereksinimlerinizi karşıladığından emin olun. Bu eklentiler şurada bulunur:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
Burada [prefix]
, npm
ön ek dizinidir. Görüntüleyin
ayrıca "Edge Microgateway yüklü olduğu yerler" Chrome'u Yükleme
Mikro ağ geçidi.
Ayrıntılar için Önceden tanımlanmış Edge Microgateway ile sağlanan eklentiler
Basit bir eklenti yazın
Bu bölümde, basit bir eklenti oluşturmak için gereken adımları anlatacağız. Bu eklenti yanıt verilerini (her ne ise) "Hello, World!" dizesiyle geçersiz kılar ve bunu şuraya yazdırır: terminal.
- Edge Microgateway çalışıyorsa hemen durdurun:
edgemicro stop
-
Özel eklenti dizinine
cd
:cd [prefix]/lib/node_modules/edgemicro/plugins
burada
[prefix]
,npm
ön eki dizinidir "Edge Microgateway yüklü olduğu yerler" bölümünde açıklandığı gibi Edge'yi Yükleme'de Mikro ağ geçidi. - response-override ve
cd
adlı yeni bir eklenti projesi oluşturun. ona:
mkdir response-override && cd response-override
- Yeni bir Node.js projesi oluşturun:
Varsayılanları kabul etmek için Geri Dön'e birden çok kez basın.npm init
index.js
adlı yeni bir dosya oluşturmak için bir metin düzenleyici kullanın.- Aşağıdaki kodu
index.js
klasörüne kopyalayıp dosyayı kaydedin.
'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"); } }; }
- Şimdi bir eklenti oluşturdunuz ve bunu Edge Microgateway yapılandırmasına eklemeniz gerekiyor.
org
ve burada yer alan$HOME/.edgemicro/[org]-[env]-config.yaml
dosyasını açın.env
, Edge kuruluşunuz ve ortam adlarınızdır. response-override
eklentisiniplugins:sequence
öğesine ekleyin aşağıda gösterildiği gibidir.
... plugins: dir: ../plugins sequence: - oauth - response-override ...
- Edge Microgateway'i yeniden başlatın.
- Edge Microgateway üzerinden bir API çağırın. (Bu API çağrısında, aynı anahtar/değer çifti için
Kurulum sırasında açıklandığı gibi API anahtarı güvenliği içeren eğitim
ve Edge Microgateway'i yapılandırma:
curl -H 'x-api-key: uAM4gBSb6YoMvTHfx5lXJizYIpr5Jd' http://localhost:8000/hello/echo Hello, World!
Eklentinin anatomisi
Aşağıdaki Edge Microgateway örnek eklentisinde,
kendi eklentilerinizi oluşturabilirsiniz. Bu bölümde açıklanan örnek eklentinin kaynak kodu:
plugins/header-uppercase/index.js.
içinde
- Eklentiler,
package.json
veindex.js
bulunan standart NPM modülleridir kök klasörde bulabilirsiniz. - Eklenti, init() işlevini dışa aktarmalıdır.
- init() işlevi üç bağımsız değişken alır: config, logger ve istatistikler. Bu bağımsız değişkenler Eklenti'de açıklanmıştır init() işlevi bağımsız değişkenleri için geçerlidir.
- init(), bir isteğin ömrü boyunca belirli olaylar gerçekleşir.
Etkinlik işleyici işlevleri
Bir eklenti, bu etkinlik işleyici işlevlerinden bazılarını veya tümünü uygulamalıdır. Bunların uygulanması seçim yapmanıza yardımcı olur. Verilen herhangi bir işlev isteğe bağlıdır ve normal bir eklenti bir alt kümesi olabilir.
İstek akışı etkinlik işleyicileri
Bu işlevler, Edge Microgateway'de istek etkinliklerinde çağrılır.
onrequest
ondata_request
onend_request
onclose_request
onerror_request
onrequest
işlevi
İstemci isteğinin başında aranır. Bu fonksiyon, dosyanın ilk baytı isteği Edge Microgateway tarafından alınır. Bu işlev, istek başlıklarına ve URL, sorgu parametreleri ve HTTP yöntemi. Bir sonraki çağrıyı doğru ilk bağımsız değişkenle (örneğin, Böylece, isteğin işlenmesi durur ve bir hedef istek başlatılmaz.
Örnek:
onrequest: function(req, res, next) { debug('plugin onrequest'); req.headers['x-foo-request-start'] = Date.now(); next(); }
ondata_request
işlevi
İstemciden bir veri parçası alındığında çağrılır. İstek verilerini sonraki ilk sıraya yerleştirin. Sıralamadaki son eklentiden döndürülen değer yardımcı olur. Aşağıda gösterilen tipik kullanım alanlarından biri, istek verilerini göndermeden önce dönüştürmektir. .
Örnek:
ondata_request: function(req, res, data, next) { debug('plugin ondata_request ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
onend_request
işlevi
İstemciden istek verilerinin tümü alındığında çağrılır.
Örnek:
onend_request: function(req, res, data, next) { debug('plugin onend_request'); next(null, data); }
onclose_request
işlevi
İstemci bağlantısının kapandığını belirtir. Bu işlevi, istemci bağlantısı güvenilir değil. İstemci ile olan yuva bağlantısı şu durumlarda çağrılır: kapalı.
Örnek:
onclose_request: function(req, res, next) { debug('plugin onclose_request'); next(); }
onerror_request
işlevi
İstemci isteği alınırken bir hata oluşursa çağrılır.
Örnek:
onerror_request: function(req, res, err, next) { debug('plugin onerror_request ' + err); next(); }
Yanıt akışı etkinlik işleyicileri
Bu işlevler, Edge Microgateway'de yanıt etkinliklerinde çağrılır.
onresponse
ondata_response
onend_response
onclose_response
onerror_response
onresponse
işlevi
Hedef yanıtın başında çağrıldı. Bu fonksiyon, dosyanın ilk baytı yanıtı Edge Microgateway tarafından alınır. Bu işlev, yanıt başlıklarına ve durum kodu.
Örnek:
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
işlevi
Hedeften bir veri parçası alındığında çağrılır.
Örnek:
ondata_response: function(req, res, data, next) { debug('plugin ondata_response ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
.
onend_response
işlevi
Hedeften yanıt verilerinin tamamı alındığında çağrılır.
Örnek:
onend_response: function(req, res, data, next) { debug('plugin onend_response'); next(null, data); }
onclose_response
işlevi
Hedef bağlantının kapandığını belirtir. Bu işlevi, güvenilir değil. Bu, hedefe olan yuva bağlantısı şu anda kapalı.
Örnek:
onclose_response: function(req, res, next) { debug('plugin onclose_response'); next(); }
.
onerror_response
işlevi
Hedef yanıt alınırken bir hata oluşursa çağrılır.
Örnek:
onerror_response: function(req, res, err, next) { debug('plugin onerror_response ' + err); next(); }
eklenti etkinlik işleyici işlevleri
Eklenti etkinlik işleyici işlevleri, Edge Microgateway, belirli bir API isteğini işler.
- init() işlev işleyicilerinin her biri (ondata_request, ondata_response vb.) tamamlandığında, next() geri çağırmasını çağırmalıdır bahsedeceğim. next() çağrısı yapmazsanız işleme durur ve istek asılacak.
- next() için ilk bağımsız değişken, isteğe neden olacak bir hata olabilir feshedilir.
- ondata_ ve onend_ işleyicileri Hedefe iletilecek verileri içeren ikinci bir bağımsız değişkeni içeren next() karar vermenize yardımcı olacaktır. Eklenti arabelleğe alınıyorsa ve işlem için yeterli veri yoksa bu bağımsız değişken boş olabilir yaşandığını söyleyebiliriz.
- Tüm isteklere ve yanıtlara hizmet vermek için eklentinin tek bir örneğinin kullanıldığını unutmayın. Bir eklenti çağrılar arasında istek başına durumu korumak isterse bu durumu bir özelliği, sağlanan request nesnesine (req) eklendi; ömür boyu API çağrısının süresidir.
- Tüm hataları yakalamaya ve hatayla birlikte next() çağrısına dikkat edin. Başarısız next() çağrısı, API çağrısının askıya alınmasına neden olur.
- Edge'in genel performansını etkileyebileceğinden bellek sızıntıları yaşamamaya dikkat edin Mikro ağ geçidi ve belleği tükenirse kilitlenmesine neden olur.
- Ana makinede yoğun bilgi işlem gerektiren görevler yapmadan Node.js modelini iş parçacığı (bu, Edge Microgateway'in performansını olumsuz etkileyebilir).
Eklentinin init() işlevi hakkında
Bu bölümde, init() işlevine iletilen bağımsız değişkenler açıklanmaktadır: config, logger ve stats.
yapılandırma
Edge Microgateway yapılandırma dosyasının Google Etiket Yöneticisi'yle birleştirilmesiyle elde edilen yapılandırma verileri
Apigee Edge'den indirilen veriler config
adlı bir nesneye yerleştirilir.
foo değeriyle param adlı bir yapılandırma parametresi eklemek için
response-override adlı bir eklentiye eklemek için bunu default.yaml
dosya:
response-override: param: foo
Ardından, eklenti kodunuzdaki parametreye şu şekilde erişebilirsiniz:
// 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); },
Bu durumda, eklenti hata ayıklama çıktısında foo değerini görürsünüz:
Sun, 13 Dec 2015 21:25:08 GMT plugin:response-override ***** plugin ondata_response: config.param: foo
Siz
Konsolda, birleştirilmiş mikro ağ geçidi yapılandırmasına ve indirilmiş Apigee Edge verilerine
config.emgConfigs
alt nesnesi. Örneğin,
bu yapılandırma verilerine init
işlevinden erişebilirsiniz
şu şekilde:
module.exports.init = function(config, logger, stats) { let emgconfigs = config.emgConfigs;
Aşağıda, emgConfigs
verilerinin bulunduğu bir örnek verilmiştir:
{ 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
Sistem günlük kaydı. Kullanılmakta olan günlükçü, bu fonksiyonları dışa aktarır. bir dize, HTTP isteği, HTTP yanıtı veya Hata örneği.
info(object, message)
warn(object, message)
error(object, message)
trace(object, message)
debug(object, message)
stats
İstek, yanıt, hata ve diğer toplu istatistiklerin sayısını barındıran nesne Mikro ağ geçidi örneğinden geçen istekler ve yanıtlar ile ilgilidir.
- treqErrors - Hata içeren hedef isteklerin sayısı.
- treqErrors - Hata içeren hedef yanıtların sayısı.
- statusCodes - Yanıt kodu sayılarını içeren bir nesne:
{ 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 - Toplam istek sayısı.
- yanıtlar - Toplam yanıt sayısı.
- bağlantılar: Etkin hedef bağlantıların sayısı.
next() işlevi hakkında
Tüm eklenti yöntemlerininnext()
serisi (veya eklenti işlemi askıya alınır). İstek yaşam döngüsünde çağrılan ilk yöntem
onrequest() işlevini kullanın. Çağrılacak bir sonraki yöntem ondata_request()
yöntemidir; ancak,
ondata_request
, yalnızca aşağıdaki gibi veri bulunması durumunda çağrılır:
bir POST isteği olabilir. Çağrılan bir sonraki yöntem
onend_request()
, isteğin işlenmesi tamamlandığında çağrılır. İlgili içeriği oluşturmak için kullanılan
onerror_*
işlevleri yalnızca hata durumunda çağrılır ve şunları yapmanıza olanak tanır:
bu hataları özel kodla ele alabilirsiniz.
Verilerin istekte gönderildiğini ve ondata_request()
öğesinin çağrıldığını varsayalım. Bildirim
next()
, iki parametreyle çağrılıyor:
next(null, data);
Kural olarak, ilk parametre hata bilgilerini aktarmak için kullanılır ve daha sonra
tutma yeriyle ilgili başka bir işlevi yoktur. Bunu null
değerine ayarladığınızda bir faalsy
bağımsız değişkeni üzerinde herhangi bir hata olmadığını ve isteğin normal bir şekilde işlenmesi gerektiğini söylüyoruz. Eğer
(Hata nesnesi gibi) bağımsız değişken doğruysa, istek işleme durur ve istek
hedefe gönderilir.
İkinci parametre, istek verilerini zincirdeki bir sonraki işleve iletir. Hayır
istek verileri değiştirildikten sonra API'nin hedefine iletilmez.
Ancak, bu yöntemden istek verilerini değiştirme ve değiştirilen kodu iletme şansınız vardır
istek üzerine çalışır. Örneğin, istek verileri XML ise ve hedef JSON bekliyorsa,
o zaman ondata_request()
yöntemine (a)
İstek başlığının Content-Type'ı, application/json
değerine ayarlanır ve istek verilerini dönüştürür
kullanarak JSON'a dönüştürebilirsiniz (örneğin, bir Node.js veya
NPM'den edinilen xml2json dönüştürücüsü).
Şimdi bunun nasıl görünebileceğine bakalım:
ondata_request: function(req, res, data, next) { debug('****** plugin ondata_request'); var translated_data = parser.toJson(data); next(null, translated_data); },
Bu durumda, istek verileri (XML olduğu varsayılır) JSON'a dönüştürülür ve
dönüştürülen veriler, next()
aracılığıyla istek zincirindeki bir sonraki işleve iletilir.
arka uç hedefine geçirilmeden önce test edilir.
Dönüştürülen verileri hata ayıklama amacıyla yazdırmak için başka bir hata ayıklama ifadesi ekleyebileceğinizi unutmayın amaçlar. Örneğin:
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); },
Hakkında eklenti işleyici yürütme sırası
Edge Microgateway için eklentiler yazıyorsanız eklentinin hangi sırayla etkinlik işleyicileri yürütülür.
Unutulmaması gereken önemli nokta şudur: Edge'de bir eklenti sırası belirlediğinizde Mikro ağ geçidi yapılandırma dosyası, istek işleyiciler artan sırada yürütülür, yanıt işleyiciler ise azalan sırada yürütülür.
Aşağıdaki örnek, bu yürütme sırasını anlamanıza yardımcı olmak üzere tasarlanmıştır.
1. Üç basit adım oluşturun eklentiler
Aşağıdaki eklentiyi kullanabilirsiniz. Tek yaptığı, etkinlik işleyicileri etkinken konsol çıkışıdır adı:
eklentiler/eklentiler-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); } }; }
Şimdi, tek bir eklentiyle plugin-2
ve plugin-3
olmak üzere iki eklenti daha oluşturabilirsiniz:
aynı kod (console.log()
ifadelerini plugin-2
olarak değiştirin)
ve plugin-3
) ekleyin.
2. Eklenti kodunu inceleme
Dışa aktarılan eklenti
<microgateway-root-dir>/plugins/plugin-1/index.js
, şu özelliklere sahip etkinlik işleyicilerdir:
istek ve yanıt işleme sırasında belirli zamanlarda yürütülür. Örneğin,
onrequest
, alınan istek başlıklarının ilk baytını yürütür. Ancak,
onend_response
, yanıt verilerinin son baytı alındıktan sonra yürütülür.
ondata_response işleyicisine göz atın. Yanıt verisi parçası olduğunda çağrılır alındı. Önemli nokta, yanıt verilerinin tam olarak alınmadığıdır. bir kez. Bunun yerine, veriler rastgele uzunlukta parçalar halinde alınabilir.
3. Eklentileri şuraya ekle: eklenti sırası
Bu örnekten devam edelim. Eklentileri Edge'deki eklenti sırasına ekleyeceğiz
Microgateway yapılandırma dosyası (~./edgemicro/config.yaml
) aşağıdaki gibidir. Sıra
önemlidir. Eklenti işleyicilerin yürütülme sırasını tanımlar.
plugins: dir: ../plugins sequence: - plugin-1 - plugin-2 - plugin-3
4. Hata ayıklama çıkışını inceleme
Şimdi, bu eklentiler çağrıldığında üretilen çıkışa bakalım. Her biri 100'den az gösterim alan dikkat edilmesi gereken birkaç önemli nokta var:
- Edge Microgateway yapılandırma dosyasının eklenti sırası
(
~./edgemicro/config.yaml
), etkinlik işleyicilerin hangi sırayla çağrıldı. - İstek işleyiciler artan düzende çağrılır (sırasıyla görünür (1, 2, 3).
- Yanıt işleyiciler azalan düzende çağrılır (3, 2, 1).
ondata_response
işleyici, oluşturulan her veri parçası için bir kez geldiğinde. Bu örnekte (çıktı aşağıda gösterilmiştir) iki parça alınmıştır.
Bu üç eklenti kullanılırken ve bir istek gönderildiğinde üretilen örnek hata ayıklama çıkışını burada bulabilirsiniz aracılığıyla şifre oluşturabilirsiniz. İşleyicilerin çağrılma sırasına dikkat etmeniz yeterlidir:
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
Özet
Eklenti işleyicilerin çağrıldığı sırayı anlamak, istek veya yanıtı biriktirme ve dönüştürme gibi özel eklenti işlevlerini uygulayabilirsiniz. dışı verilerdir.
İstek işleyicilerin, eklentilerin kaldırılma sırasına göre yürütüldüğünü veri işleyicileri tarafından çalıştırılan ve ters sırada.
Eklentilerde genel değişkenleri kullanma hakkında
Edge Microgateway'e yapılan her istek aynı eklenti örneğine gönderilir; Bu nedenle, başka bir istemciden gelen ikinci isteğin durumu, ilk isteğin üzerine yazılır. Projenin gidişatı boyunca "kaydet" eklentisinin durumu, durumu istek veya yanıt nesnesindeki ( kullanım ömrü isteğin süresiyle sınırlıdır.
Eklentilerdeki hedef URL'leri yeniden yazma
Eklendiği sürüm: 2.3.3 sürümü
Bir eklentideki varsayılan hedef URL'yi dinamik olarak geçersiz kılmak için bu değişkenleri değiştirerek Eklenti kodunuz: req.targetHostname ve req.targetPath.
Eklendiği sürüm: v2.4.x
Ayrıca, hedef uç nokta bağlantı noktasını geçersiz kılabilir ve HTTP ile HTTPS arasında seçim yapabilirsiniz. Bunları değiştir değişkenleri: req.targetPort ve req.targetSecure. HTTPS'yi seçmek için req.targetSecure özelliğini şu şekilde ayarlayın: true; için false (yanlış) değerine ayarlayın. req.targetSecure özelliğini true, bu tartışmaya bakın ileti dizisinde bulabilirsiniz.
Kaldırıldı: v3.3.3
eurekaclient adlı örnek eklenti, Microsoft tarafından v.3.3.3. Sürüm notları'na bakın.
Bu özelliğin kaldırılması, Edge mikro ağ geçidinin temel işlevini etkilemez.
hedef URL'lerin yeniden yazılmasını engeller. Dinamik uç nokta aramasını yapılandırabilir ve verileri geçersiz kılabilirsiniz.
req.targetHostname
, req.targetPath
, req.targetPort
ve req.targetSecure
gibi değişkenleri hedefle
eklenti düzeyinde. Eklentilerdeki hedef URL'leri yeniden yazma başlıklı makaleyi inceleyin.
.
Örnek eklentiler
Bu eklentiler, Edge Microgateway yüklemenizle birlikte sağlanır. Bunları Edge Microgateway yüklemesi burada:
[prefix]/lib/node_modules/edgemicro/plugins
burada [prefix]
, aşağıdaki gibi npm
ön ek dizinidir:
"Edge Microgateway'in yüklü olduğu yerler" Edge'yi Yükleme'de
Mikro ağ geçidi.
accumulate-request
Bu eklenti, istemciden veri parçalarını istek nesnesini oluşturur. Tüm istek verileri alındığında dizi bir Arabellekte birleştirilir. Bu, daha sonra sıradaki eklentiye iletilir. Bu eklenti, ilk eklenti olmalıdır sıralayarak sonraki eklentilerin biriken istek verilerini almasını sağlayın.
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
Bu eklenti, hedeften gelen veri parçalarını yanıt nesnesini tanımlayın. Tüm yanıt verileri alındığında dizi bir Arabellekte birleştirilir. Bu, daha sonra sıradaki eklentiye iletilir. Bu eklenti veya ters sırada işlenen yanıtları görmek için, dosyayı son eklenti olarak yerleştirmeniz gerekir. tıklayın.
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); } }; }
başlık-büyük harf eklentisi
Edge Microgateway dağıtımları,
<microgateway-root-dir>/plugins/header-uppercase
Örnekte yorumlar yer alıyor
tanımlayarak fonksiyon işleyicilerin her birini açıklayın. Bu örnek, JavaScript'in barındırdığı bazı basit veri dönüşümlerini
ve istemci isteği ile hedef yanıta özel başlıklar ekler.
Şunun için kaynak kodu:
<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(); } }; }
büyük harf dönüştürme
Bu, istediğiniz türde yapmak için değiştirebileceğiniz genel bir dönüştürme eklentisidir. istediğiniz dönüşüm işlemini yapabilirsiniz. Bu örnek, yanıtı ve istek verilerini büyük harf kullanın.
*/ 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); } }; }