Materi
Beberapa pekerjaan berlaku untuk hampir semua rute: mencatat permintaan, memeriksa token, menambah header keamanan, menangkap galat. Menulisnya di setiap handler membuat kode berulang dan mudah terlewat, sehingga pekerjaan itu dipisah menjadi lapisan bernama middleware. Dokumentasi Express mendefinisikan middleware sebagai fungsi yang punya akses ke request, response, dan fungsi next; ia boleh menjalankan kode, mengubah request dan response, mengakhiri siklus request–respons, atau memanggil next untuk menyerahkan kendali. Middleware yang tidak mengakhiri siklus wajib memanggil next, kalau tidak permintaan menggantung.
// Express
app.use((req, res, next) => {
res.setHeader("X-Content-Type-Options", "nosniff");
next();
});
// Model kelas ini: menerima req dan next, mengembalikan respons
function nosniff(req, next) {
const res = next(req);
return { ...res, headers: { ...res.headers, "x-content-type-options": "nosniff" } };
}Di kelas ini middleware berbentuk fungsi (req, next) yang mengembalikan respons. Meneruskan berarti return next(req); menghentikan berarti mengembalikan respons sendiri tanpa memanggil next; mengubah request berarti memanggil next dengan salinan req yang ditambah field; mengubah respons berarti mengolah hasil next sebelum mengembalikannya. Header nosniff di contoh berasal dari OWASP REST Security Cheat Sheet, yang memintanya di respons API supaya peramban tidak menebak jenis isi.
Urutan pemasangan menentukan urutan jalan: Express menyatakan middleware yang dimuat lebih dulu dijalankan lebih dulu. Middleware pertama membungkus semua lapisan sesudahnya seperti kulit bawang, sehingga ia masuk paling awal dan keluar paling akhir.