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 melalui routePrefix 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 memanggil context.done() 1.x untuk menyelesaikan eksekusi, sementara fungsi async 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 atau PUT.

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