Middleware merupakan bagian yang bisa kita pasangkan di rute tertentu sebagai sebuah prosedur yang perlu dilakukan saat memproses sebuah request. Dengan membuat suatu middleware, logic yang berulang atau digunakan di beberapa rute tidak perlu ditulis berulang di masing-masing controller, melainkan hanya ditulis sekali sebagai middleware dan dipanggil saat dibutuhkan. Saat ini kita akan membuat middleware untuk mengecek token dan role user
Masukkan kode berikut ke app/middleware/authJwt.js
const jwt = require("jsonwebtoken");
const config = require("../config/auth.config.js");
const db = require("../models");
const User = db.user;
verifyToken = (req, res, next) => {
let token = req.headers["x-access-token"];
if (!token) {
return res.status(403).send({
message: "No token provided!"
});
}
jwt.verify(token, config.secret, (err, decoded) => {
if (err) {
return res.status(401).send({
message: "Unauthorized!"
});
}
req.userId = decoded.id;
next();
});
};
Kode tersebut mendefinisikan middleware untuk proses pengecekan token yang dikirimkan user saat melakukan request. Kode tersebut akan memverifikasi token yang dikirimkan di header sebuah request. Token yang kita buat sebelumnya mengandung userId, data ini akan diambil dan dioper untuk digunakan oleh controller.
Selanjutnya mari kita pasangkan ke route untuk mengambil data user. Ubah kode berikut di app/routes/user.route.js
...
app.get("/api/user/get", controller.get);
...
menjadi
...
app.get(
"/api/user/get",
[authJwt.verifyToken],
controller.get
);
...
Import juga middleware tersebut ke routernya sebelum dipanggil, sebagai berikut
const { authJwt } = require("../middleware");
const controller = require("../controllers/user.controller");
...
Kemudian masukkan kode berikut ke app/controller/user.controller.js
exports.get = (req, res) => {
User.findOne({
where: {
id: req.userId
}
})
.then(user => {
if (!user) {
return res.status(404).send({ message: "User Not found." });
}
user.getRoles().then(roles => {
res.status(200).send({
id: user.id,
username: user.username,
email: user.email,
roles: roles
});
});
})
.catch(err => {
res.status(500).send({ message: err.message });
});
};
Saat ini aplikasi yang kita buat sudah memenuhi struktur yang dibutuhkan. Untuk membangun fitur pada aplikasi yang sebenarnya tinggal mengikuti langkat berikut:
- Tentukan entitas yang dibutuhkan -> buat model berdasarkan hal tersebut
- Tentukan fungsionalitas yang dibutuhkan -> buat fungsi pada controller berdasarkan hal tersebut
- Buat rute yang merujuk pada masing-masing fungsi di controller
- Buat middleware untuk proses yang dilakukan berulang dan pasang di rute yang dibutuhkan
Dengan demikian berakhir tutorial singkat untuk membangun API dengan node express. Selamat mencoba
Sumber: