Beralih dari Express.js ke Azure Functions
Express.js adalah salah satu kerangka kerja Node.js paling populer untuk pengembang web dan tetap menjadi pilihan yang sangat baik untuk membangun aplikasi yang melayani titik akhir API.
Saat melakukan migrasi kode ke arsitektur tanpa server, titik akhir Express.js memengaruhi area berikut:
Middleware: Express.js menampilkan koleksi middleware yang kuat. Banyak modul middleware tidak lagi diperlukan mengingat kemampuan Azure Functions dan Azure API Management. Pastikan Anda dapat mereplikasi atau mengganti logika apa pun yang ditangani oleh middleware penting sebelum melakukan migrasi titik akhir.
API pembeda: API yang digunakan untuk memproses permintaan dan respons berbeda antara Azure Functions dan Express.js. Contoh berikut merinci perubahan yang diperlukan.
Rute default: Secara default, titik akhir Azure Functions diekspos di bawah rute
api
. Aturan perutean dapat dikonfigurasi melaluiroutePrefix
dalam file host.json.Konfigurasi dan konvensi: Aplikasi Functions menggunakan file function.json untuk menentukan kata kerja HTTP, menentukan kebijakan keamanan, dan dapat mengonfigurasi input dan output fungsi. Secara default, nama folder yang berisi file fungsi menentukan nama titik akhir, tetapi Anda dapat mengubah nama melalui properti
route
di file function.json.
Tip
Pelajari selengkapnya melalui tutorial interaktif Refactor Node.js dan API Ekspres ke API Tanpa Server dengan Azure Functions.
Contoh
Express.js
Contoh berikut menunjukkan titik akhir GET
Express.js yang khas.
// server.js
app.get('/hello', (req, res) => {
try {
res.send("Success!");
} catch(error) {
const err = JSON.stringify(error);
res.status(500).send(`Request error. ${err}`);
}
});
Saat permintaan GET
dikirim ke /hello
, respons HTTP 200
yang berisi Success
dikembalikan. Jika titik akhir mengalami kesalahan, responsnya adalah HTTP 500
dengan detail kesalahan.
Azure Functions
Azure Functions menata konfigurasi dan file kode ke dalam satu folder untuk setiap fungsi. Secara default, nama folder mendikte nama fungsi.
Misalnya, fungsi bernama hello
memiliki folder dengan file-file berikut.
| - hello
| - function.json
| - index.js
Contoh berikut mengimplementasikan hasil yang sama dengan titik akhir Express.js di atas, tetapi dengan Azure Functions.
// hello/index.js
module.exports = async function (context, req) {
try {
context.res = { body: "Success!" };
} catch(error) {
const err = JSON.stringify(error);
context.res = {
status: 500,
body: `Request error. ${err}`
};
}
};
Saat berpindah ke Functions, perubahan berikut dibuat:
Modul: Kode fungsi diimplementasikan sebagai modul JavaScript.
Objek respons dan konteks:
context
mengizinkan Anda berkomunikasi dengan runtime Function. Dari konteks, Anda dapat membaca data permintaan dan mengatur respons fungsi. Kode sinkron mengharuskan Anda untuk memanggilcontext.done()
1.x untuk menyelesaikan eksekusi, sementara fungsiasync
2.x+ menyelesaikan permintaan secara implisit.Konvensi penamaan: Nama folder yang digunakan untuk memuat file Azure Functions digunakan sebagai nama titik akhir secara default (ini dapat ditimpa di function.json).
Konfigurasi: Anda menentukan kata kerja HTTP di file function.jspada seperti
POST
atauPUT
.
File function.json berikut menyimpan informasi konfigurasi untuk fungsi tersebut.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
Dengan menentukan get
dalam larik methods
, fungsi tersebut tersedia untuk permintaan GET
HTTP. Jika ingin API menerima permintaan dukungan POST
, Anda juga dapat menambahkan post
ke larik.
Langkah berikutnya
- Pelajari selengkapnya dengan tutorial interaktif Refactor Node.js dan API Ekspres ke API Tanpa Server dengan Azure Functions