Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Edge Microgateway v. 2.5.x
Audiens
Topik ini ditujukan bagi developer yang ingin memperluas fitur Edge Microgateway dengan menulis plugin kustom. Jika Anda ingin menulis plugin baru, pengalaman dengan JavaScript dan Node.js diperlukan.
Apa yang dimaksud dengan plugin Edge Microgateway kustom?
Plugin adalah modul Node.js yang menambahkan fungsi ke Edge Microgateway. Modul plugin mengikuti pola yang konsisten dan disimpan di lokasi yang diketahui oleh Edge Microgateway, sehingga dapat ditemukan dan dijalankan secara otomatis. Beberapa plugin yang telah ditentukan sebelumnya disediakan saat Anda menginstal Edge Microgateway. Hal ini mencakup plugin untuk autentikasi, pembatasan lonjakan, kuota, dan analisis. Plugin yang ada ini dijelaskan dalam Menggunakan plugin.
Anda dapat menambahkan fitur dan kemampuan baru ke microgateway dengan menulis plugin kustom. Secara default, Edge Microgateway pada dasarnya adalah proxy pass-through yang aman yang meneruskan permintaan dan respons tanpa diubah ke dan dari layanan target. Dengan plugin kustom, Anda dapat berinteraksi secara terprogram dengan permintaan dan respons yang mengalir melalui microgateway.
Tempat untuk menempatkan kode plugin kustom
Folder untuk plugin kustom disertakan sebagai bagian dari penginstalan Edge Microgateway di sini:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
dengan [prefix] adalah direktori awalan npm seperti yang dijelaskan dalam "Where is Edge Microgateway installed" di Installing Edge Microgateway.
Anda dapat mengubah direktori plugin default ini. Lihat Tempat menemukan plugin.
Meninjau plugin yang telah ditentukan sebelumnya
Sebelum Anda mencoba mengembangkan plugin sendiri, sebaiknya periksa apakah ada plugin bawaan yang memenuhi persyaratan Anda. Plugin ini berada di:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
dengan [prefix] adalah direktori awalan npm. Lihat
juga "Di mana Edge Microgateway diinstal" di Menginstal Edge
Microgateway.
Untuk mengetahui detailnya, lihat juga Plugin standar yang disediakan dengan Edge Microgateway.
Menulis plugin sederhana
Di bagian ini, kita akan membahas langkah-langkah yang diperlukan untuk membuat plugin sederhana. Plugin ini mengganti data respons (apa pun itu) dengan string "Hello, World!" dan mencetaknya ke terminal.
- Jika Edge Microgateway sedang berjalan, hentikan sekarang:
edgemicro stop
-
cdke direktori plugin kustom:cd [prefix]/lib/node_modules/edgemicro/pluginsdengan
[prefix]adalah direktori awalannpmseperti yang dijelaskan dalam "Where is Edge Microgateway installed" di Installing Edge Microgateway. - Buat project plugin baru bernama response-override dan
cdke dalamnya:
mkdir response-override && cd response-override
- Buat project Node.js baru:
Tekan Return beberapa kali untuk menyetujui setelan default.npm init
- Gunakan editor teks untuk membuat file baru bernama
index.js. - Salin kode berikut ke
index.js, lalu simpan file.
'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"); } }; }
- Setelah membuat plugin, Anda perlu menambahkannya ke konfigurasi Edge Microgateway.
Buka file
$HOME/.edgemicro/[org]-[env]-config.yaml, denganorgdanenvadalah nama organisasi dan lingkungan Edge Anda. - Tambahkan plugin
response-overrideke elemenplugins:sequenceseperti yang ditunjukkan di bawah.
... plugins: dir: ../plugins sequence: - oauth - response-override ... - Mulai ulang Edge Microgateway.
- Memanggil API melalui Edge Microgateway. (Panggilan API ini mengasumsikan Anda telah menyiapkan konfigurasi yang sama dengan tutorial tentang keamanan kunci API, seperti yang dijelaskan dalam Menyiapkan dan mengonfigurasi Edge Microgateway:
curl -H 'x-api-key: uAM4gBSb6YoMvTHfx5lXJizYIpr5Jd' http://localhost:8000/hello/echo Hello, World!
Anatomi plugin
Contoh plugin Edge Microgateway berikut mengilustrasikan pola yang harus diikuti saat
mengembangkan plugin Anda sendiri. Kode sumber untuk plugin contoh yang dibahas di bagian ini ada
di plugins/header-uppercase/index.js.
- Plugin adalah modul NPM standar dengan
package.jsondanindex.jsdi folder root. - Plugin harus mengekspor fungsi init().
- Fungsi init() menggunakan tiga argumen: config, logger, dan stats. Argumen ini dijelaskan dalam argumen fungsi init() Plugin.
- init() menampilkan objek dengan pengendali fungsi bernama yang dipanggil saat peristiwa tertentu terjadi selama masa pakai permintaan.
Fungsi pengendali peristiwa
Plugin harus menerapkan beberapa atau semua fungsi pengendali peristiwa ini. Implementasi fungsi ini sepenuhnya bergantung pada Anda. Setiap fungsi yang diberikan bersifat opsional, dan plugin umum akan menerapkan setidaknya sebagian kecil dari fungsi ini.
Pengendali peristiwa alur permintaan
Fungsi ini dipanggil pada peristiwa permintaan di Edge Microgateway.
onrequestondata_requestonend_requestonclose_requestonerror_request
onrequest function
Dipanggil di awal permintaan klien. Fungsi ini diaktifkan saat byte pertama permintaan diterima oleh Edge Microgateway. Fungsi ini memberi Anda akses ke header permintaan, URL, parameter kueri, dan metode HTTP. Jika Anda memanggil next dengan argumen pertama yang benar (seperti instance Error), pemrosesan permintaan akan berhenti dan permintaan target tidak akan dimulai.
Contoh:
onrequest: function(req, res, next) { debug('plugin onrequest'); req.headers['x-foo-request-start'] = Date.now(); next(); }
ondata_request function
Dipanggil saat potongan data diterima dari klien. Meneruskan data permintaan ke plugin berikutnya dalam urutan plugin. Nilai yang ditampilkan dari plugin terakhir dalam urutan dikirim ke target. Kasus penggunaan umum, yang ditunjukkan di bawah, adalah mengubah data permintaan sebelum mengirimkannya ke target.
Contoh:
ondata_request: function(req, res, data, next) { debug('plugin ondata_request ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
onend_request function
Dipanggil saat semua data permintaan telah diterima dari klien.
Contoh:
onend_request: function(req, res, data, next) { debug('plugin onend_request'); next(null, data); }
Fungsi onclose_request
Menunjukkan bahwa koneksi klien telah ditutup. Anda dapat menggunakan fungsi ini jika koneksi klien tidak dapat diandalkan. Metode ini dipanggil saat koneksi soket ke klien ditutup.
Contoh:
onclose_request: function(req, res, next) { debug('plugin onclose_request'); next(); }
Fungsi onerror_request
Dipanggil jika terjadi error saat menerima permintaan klien.
Contoh:
onerror_request: function(req, res, err, next) { debug('plugin onerror_request ' + err); next(); }
Pengendali peristiwa alur respons
Fungsi ini dipanggil pada peristiwa respons di Edge Microgateway.
onresponseondata_responseonend_responseonclose_responseonerror_response
Fungsi onresponse
Dipanggil di awal respons target. Fungsi ini diaktifkan saat byte pertama respons diterima oleh Edge Microgateway. Fungsi ini memberi Anda akses ke header respons dan kode status.
Contoh:
onresponse: function(req, res, next) { debug('plugin onresponse'); res.setHeader('x-foo-response-time', Date.now() - req.headers['x-foo-request-start']) next(); }
Fungsi ondata_response
Dipanggil saat potongan data diterima dari target.
Contoh:
ondata_response: function(req, res, data, next) { debug('plugin ondata_response ' + data.length); var transformed = data.toString().toUpperCase(); next(null, transformed); }
Fungsi onend_response
Dipanggil saat semua data respons telah diterima dari target.
Contoh:
onend_response: function(req, res, data, next) { debug('plugin onend_response'); next(null, data); }
Fungsi onclose_response
Menunjukkan bahwa koneksi target telah ditutup. Anda dapat menggunakan fungsi ini jika koneksi target tidak dapat diandalkan. Metode ini dipanggil saat koneksi soket ke target ditutup.
Contoh:
onclose_response: function(req, res, next) { debug('plugin onclose_response'); next(); }
Fungsi onerror_response
Dipanggil jika terjadi error saat menerima respons target.
Contoh:
onerror_response: function(req, res, err, next) { debug('plugin onerror_response ' + err); next(); }
Yang perlu Anda ketahui tentang fungsi pengendali peristiwa plugin
Fungsi handler peristiwa plugin dipanggil sebagai respons terhadap peristiwa tertentu yang terjadi saat Edge Microgateway memproses permintaan API tertentu.
- Setiap handler fungsi init() (ondata_request, ondata_response, dll.) harus memanggil callback next() setelah selesai memproses. Jika Anda tidak memanggil next(), pemrosesan akan berhenti dan permintaan akan ditangguhkan.
- Argumen pertama untuk next() dapat berupa error yang akan menyebabkan pemrosesan permintaan dihentikan.
- Handler ondata_ dan onend_ harus memanggil next() dengan argumen kedua yang berisi data yang akan diteruskan ke target atau klien. Argumen ini dapat berupa null jika plugin sedang melakukan buffering dan tidak memiliki cukup data untuk melakukan transformasi saat ini.
- Perhatikan bahwa satu instance plugin digunakan untuk melayani semua permintaan dan respons. Jika ingin mempertahankan status per permintaan di antara panggilan, plugin dapat menyimpan status tersebut dalam properti yang ditambahkan ke objek request (req) yang diberikan, yang masa pakainya adalah durasi panggilan API.
- Berhati-hatilah untuk menangkap semua error dan panggil next() dengan error. Kegagalan memanggil next() akan menyebabkan panggilan API terhenti.
- Berhati-hatilah agar tidak menyebabkan kebocoran memori karena dapat memengaruhi performa keseluruhan Edge Microgateway dan menyebabkan error jika kehabisan memori.
- Berhati-hatilah untuk mengikuti model Node.js dengan tidak melakukan tugas yang intensif secara komputasi di thread utama karena hal ini dapat memengaruhi performa Edge Microgateway secara negatif.
Tentang fungsi init() plugin
Bagian ini menjelaskan argumen yang diteruskan ke fungsi init(): config, logger, dan stats.
config
Objek konfigurasi yang diperoleh setelah menggabungkan file konfigurasi Edge Microgateway dengan
informasi yang didownload dari Apigee Edge, seperti produk dan kuota. Anda dapat menemukan
konfigurasi khusus plugin dalam objek ini: config.<plugin-name>.
Untuk menambahkan parameter konfigurasi bernama param dengan nilai foo
ke plugin bernama response-override, masukkan kode ini ke file default.yaml:
response-override:
param: fooKemudian, Anda dapat mengakses parameter dalam kode plugin, seperti ini:
// 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); },
Dalam hal ini, Anda akan melihat foo dicetak di output debug plugin:
Sun, 13 Dec 2015 21:25:08 GMT plugin:response-override ***** plugin ondata_response: config.param: foo
logger
Pencatat log sistem. Logger yang saat ini digunakan mengekspor fungsi ini, dengan objek dapat berupa string, permintaan HTTP, respons HTTP, atau instance Error.
info(object, message)warn(object, message)error(object, message)
stats
Objek yang menyimpan jumlah permintaan, respons, error, dan statistik gabungan lainnya yang terkait dengan permintaan dan respons yang mengalir melalui instance microgateway.
- treqErrors - Jumlah permintaan target yang mengalami error.
- treqErrors - Jumlah respons target yang mengalami error.
- statusCodes - Objek yang berisi jumlah kode respons:
{
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 - Total jumlah permintaan.
- respons - Total jumlah respons.
- connections - Jumlah koneksi target aktif.
Tentang fungsi next()
Semua metode plugin harus memanggil next() untuk melanjutkan pemrosesan metode berikutnya dalam
seri (atau proses plugin akan terhenti). Dalam siklus proses permintaan, metode pertama yang dipanggil adalah
onrequest(). Metode berikutnya yang akan dipanggil adalah metode ondata_request(); namun,
ondata_request hanya dipanggil jika permintaan menyertakan data, seperti
dalam kasus, misalnya, permintaan POST. Metode berikutnya yang dipanggil adalah
onend_request(), yang dipanggil saat pemrosesan permintaan selesai. Fungsi
onerror_* hanya dipanggil jika terjadi error, dan memungkinkan Anda
menangani error dengan kode kustom jika diinginkan.
Misalnya, data dikirim dalam permintaan, dan ondata_request() dipanggil. Perhatikan
bahwa fungsi memanggil next() dengan dua parameter:
next(null, data);
Menurut konvensi, parameter pertama digunakan untuk menyampaikan informasi error, yang kemudian dapat Anda tangani dalam fungsi berikutnya dalam rantai. Dengan menyetelnya ke null, argumen salah (falsy), kita menyatakan bahwa tidak ada error, dan pemrosesan permintaan harus berjalan normal. Jika
argumen ini bernilai benar (seperti objek Error), pemrosesan permintaan akan berhenti dan permintaan
dikirim ke target.
Parameter kedua meneruskan data permintaan ke fungsi berikutnya dalam rangkaian. Jika Anda tidak melakukan pemrosesan tambahan, data permintaan akan diteruskan tanpa perubahan ke target API.
Namun, Anda memiliki kesempatan untuk mengubah data permintaan dalam metode ini, dan meneruskan permintaan yang diubah ke target. Misalnya, jika data permintaan adalah XML, dan target mengharapkan JSON,
maka Anda dapat menambahkan kode ke metode ondata_request() yang (a) mengubah
Content-Type header permintaan menjadi application/json dan mengonversi data permintaan
menjadi JSON menggunakan cara apa pun yang Anda inginkan (misalnya, Anda dapat menggunakan konverter
xml2json Node.js yang diperoleh dari NPM).
Mari kita lihat tampilannya:
ondata_request: function(req, res, data, next) { debug('****** plugin ondata_request'); var translated_data = parser.toJson(data); next(null, translated_data); },
Dalam hal ini, data permintaan (yang diasumsikan sebagai XML) dikonversi ke JSON, dan
data yang diubah diteruskan melalui next() ke fungsi berikutnya dalam rangkaian permintaan,
sebelum diteruskan ke target backend.
Perhatikan bahwa Anda dapat menambahkan pernyataan debug lain untuk mencetak data yang diubah untuk tujuan debug. Contoh:
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); },
Tentang urutan eksekusi handler plugin
Jika Anda menulis plugin untuk Edge Microgateway, Anda harus memahami urutan eksekusi handler peristiwa plugin.
Poin penting yang perlu diingat adalah bahwa saat Anda menentukan urutan plugin dalam file konfigurasi Edge Microgateway, pengendali permintaan akan dieksekusi dalam urutan menaik, sedangkan pengendali respons akan dieksekusi dalam urutan menurun.
Contoh berikut dirancang untuk membantu Anda memahami urutan eksekusi ini.
1. Buat tiga plugin sederhana
Pertimbangkan plugin berikut. Yang dilakukannya hanyalah mencetak output konsol saat pengendali peristiwanya dipanggil:
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); } }; }
Sekarang, coba buat dua plugin lagi, plugin-2 dan plugin-3, dengan
kode yang sama (kecuali, ubah pernyataan console.log() menjadi plugin-2
dan plugin-3).
2. Meninjau kode plugin
Fungsi plugin yang diekspor di
<microgateway-root-dir>/plugins/plugin-1/index.js adalah handler peristiwa yang
dieksekusi pada waktu tertentu selama pemrosesan permintaan dan respons. Misalnya,
onrequest dieksekusi saat byte pertama header permintaan diterima. Sementara,
onend_response dieksekusi setelah byte terakhir data respons diterima.
Lihat handler ondata_response -- handler ini dipanggil setiap kali potongan data respons diterima. Yang penting untuk diketahui adalah bahwa data respons tidak selalu diterima sekaligus. Sebaliknya, data dapat diterima dalam potongan dengan panjang arbitrer.
3. Menambahkan plugin ke urutan plugin
Melanjutkan contoh ini, kita akan menambahkan plugin ke urutan plugin dalam file konfigurasi Edge Microgateway (~./edgemicro/config.yaml) sebagai berikut. Urutan ini penting. Baris ini menentukan urutan eksekusi pengendali plugin.
plugins:
dir: ../plugins
sequence:
- plugin-1
- plugin-2
- plugin-3
4. Periksa output debug
Sekarang, mari kita lihat output yang akan dihasilkan saat plugin ini dipanggil. Ada beberapa hal penting yang perlu diperhatikan:
- Urutan plugin file konfigurasi Edge Microgateway
(
~./edgemicro/config.yaml) menentukan urutan pemanggilan handler peristiwa. - Handler permintaan dipanggil dalam urutan menaik (urutan kemunculannya dalam urutan plugin -- 1, 2, 3).
- Handler respons dipanggil dalam urutan menurun -- 3, 2, 1.
- Handler
ondata_responsedipanggil sekali untuk setiap bagian data yang tiba. Dalam contoh ini (output ditampilkan di bawah), dua bagian diterima.
Berikut adalah contoh output debug yang dihasilkan saat ketiga plugin ini digunakan dan permintaan dikirim melalui Edge Microgateway. Perhatikan urutan pemanggilan handler:
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
Ringkasan
Memahami urutan pemanggilan handler plugin sangat penting saat Anda mencoba menerapkan fungsi plugin kustom, seperti mengakumulasi dan mengubah data permintaan atau respons.
Ingat saja bahwa pengendali permintaan dieksekusi dalam urutan plugin ditentukan dalam file konfigurasi Edge Microgateway, dan pengendali respons dieksekusi dalam urutan yang berlawanan.
Tentang penggunaan variabel global di plugin
Setiap permintaan ke Edge Microgateway dikirim ke instance plugin yang sama; oleh karena itu, status permintaan kedua dari klien lain akan menggantikan permintaan pertama. Satu-satunya tempat yang aman untuk menyimpan status plugin adalah dengan menyimpan status dalam properti pada objek permintaan atau respons (yang masa aktifnya terbatas pada permintaan tersebut).
Menulis ulang URL target di plugin
Ditambahkan di: v2.3.3
Anda dapat mengganti URL target default di plugin secara dinamis dengan mengubah variabel ini dalam kode plugin: req.targetHostname dan req.targetPath.
Ditambahkan di: v2.4.x
Anda juga dapat mengganti port endpoint target dan memilih antara HTTP dan HTTPS. Ubah variabel ini dalam kode plugin Anda: req.targetPort dan req.targetSecure. Untuk memilih HTTPS, setel req.targetSecure ke true; untuk HTTP, setel ke false. Jika Anda menyetel req.targetSecure ke true, lihat thread diskusi ini untuk mengetahui informasi selengkapnya.
Contoh plugin
Plugin ini disediakan bersama penginstalan Edge Microgateway Anda. Anda dapat menemukannya di penginstalan Edge Microgateway di sini:
[prefix]/lib/node_modules/edgemicro/plugins
dengan [prefix] adalah direktori awalan npm seperti yang dijelaskan dalam "Where is Edge Microgateway installed" di Installing Edge Microgateway.
accumulate-request
Plugin ini mengumpulkan potongan data dari klien ke dalam properti array yang dilampirkan ke objek permintaan. Setelah semua data permintaan diterima, array akan digabungkan menjadi Buffer yang kemudian diteruskan ke plugin berikutnya dalam urutan. Plugin ini harus menjadi plugin pertama dalam urutan sehingga plugin berikutnya menerima data permintaan yang terakumulasi.
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); } }; }
mengumpulkan-respons
Plugin ini mengumpulkan potongan data dari target ke dalam properti array yang dilampirkan ke objek respons. Setelah semua data respons diterima, array digabungkan menjadi Buffer yang kemudian diteruskan ke plugin berikutnya dalam urutan. Karena plugin ini beroperasi pada respons, yang diproses dalam urutan terbalik, Anda harus menempatkannya sebagai plugin terakhir dalam urutan.
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); } }; }
Plugin header-uppercase
Distribusi Edge Microgateway mencakup plugin contoh yang disebut
<microgateway-root-dir>/plugins/header-uppercase. Contoh ini mencakup komentar yang menjelaskan setiap handler fungsi. Contoh ini melakukan beberapa transformasi data sederhana dari
respons target dan menambahkan header kustom ke permintaan klien dan respons target.
Berikut kode sumber untuk
<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(); } }; }
transform-uppercase
Ini adalah plugin transformasi umum yang dapat Anda ubah untuk melakukan transformasi apa pun yang Anda inginkan. Contoh ini hanya mengubah data respons dan permintaan menjadi huruf besar.
*/ 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); } }; }