Farih.co.id
Home Programming Validasi Skema di Node.js Dengan Joi

Validasi Skema di Node.js Dengan Joi

someone holding node js logo

Menerima data yang belum teruji dan belum divalidasi ke dalam aplikasi web dapat menyebabkan kerentanan keamanan, dan masalah tak terduga dapat muncul dari data yang tidak valid.


ORM Node.js, seperti Sequelize dan TypeORM, memungkinkan Anda menetapkan aturan validasi di luar kotak di tingkat aplikasi. Selama pengembangan API, data berasal dari permintaan HTTP ke titik akhir tertentu. Ini terjadi pada tingkat permintaan; dengan demikian, validasi default yang ditawarkan oleh ORM tidak berlaku untuk mereka.

Joi adalah deskripsi skema dan validator data untuk JavaScript. Di sini, Anda akan mempelajari cara menggunakan pustaka validasi Joi untuk memvalidasi data pada tingkat permintaan.


Menyiapkan Proyek Demo

Untuk mendemonstrasikan caranya Joi memvalidasi data, Anda akan membuat aplikasi demo sederhana yang meniru aplikasi sebenarnya.

Tangkapan layar beranda Joi

Pertama, buat folder proyek dan pindah ke dalamnya dengan menjalankan perintah berikut:

 mkdir demoapp && cd demoapp

Selanjutnya, inisialisasi npm di direktori proyek Anda dengan menjalankan:

 npm init -y

Selanjutnya, Anda perlu menginstal beberapa dependensi. Ketergantungan yang diperlukan untuk tutorial ini termasuk yang berikut:

  • Cepat: Express adalah kerangka kerja Node.js yang menyediakan serangkaian fitur canggih untuk aplikasi web dan seluler. Express mempermudah pembuatan aplikasi backend dengan Node.js.
  • Joi: Joi adalah library validasi data untuk Node.js.

Instal dependensi dengan manajer paket node dengan menjalankan perintah di bawah ini:

 npm install express joi

Selanjutnya, buat sebuah index.js file di direktori root Anda dan tambahkan blok kode berikut ke dalamnya:

 const express = require("express");
const router = require("./routes");
const port = 3000;

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(router);

app.listen(port, () => {
  console.log("app listening on port 3000!");
});

Blok kode di atas menyiapkan server Express sederhana. Itu mengkonfigurasi middleware untuk mem-parsing data permintaan masuk dan menangani permintaan masuk dan memulai server untuk mendengarkan permintaan masuk pada port 3000.

Permintaan Perutean dan Penanganan

Untuk kemudahan, Anda akan membuat middleware penangan permintaan yang mengembalikan kode status, bersama dengan isi permintaan, sebagai respons terhadap setiap permintaan yang mencoba mengirim data ke aplikasi Anda.

Membuat handler.js file di direktori root proyek Anda dan tambahkan blok kode di bawah ini:

 const demoHandler = (req, res, next) => {
  res.send({
    code: 201,
    data: req.body,
  });
  next();
};

module.exports = demoHandler;

Selanjutnya, buat a router.js file di direktori root proyek Anda dan tambahkan blok kode di bawah ini ke file Anda:

 const express = require("express");
const demoHandler = require("./handler");
const router = express.Router();

router.post("/signup", demoHandler);

module.exports = router;

Membuat Skema Joi

Skema Joi mewakili struktur yang diharapkan dari objek data tertentu dan aturan validasi.

Untuk membuat skema Joi, Anda dapat menggunakan Joi.objek() metode dan rantai berbagai aturan validasi yang diekspos oleh Joi untuk menentukan struktur dan persyaratan validasi untuk data Anda.

Misalnya:

 const exampleSchema = Joi.object({
  name: Joi.string().min(3).required(),
});

Contoh di atas menggambarkan skema Joi sederhana dengan a nama Properti. Itu nama properti memiliki nilai Joi.string().min(3).required(). Ini berarti bahwa nama nilai harus berupa string, dengan panjang minimal 3 karakter, dan wajib diisi.

Menggunakan Joi, Anda dapat merangkai berbagai metode untuk menambahkan lebih banyak batasan validasi ke setiap bidang yang ditentukan dalam skema Anda.

Berikut adalah contoh dengan lebih banyak bidang dan batasan validasi:

 const userSchema = Joi.object({
  email: Joi.string().email().required(),

  password: Joi.string().min(6).required(),

  age: Joi.number().min(18).optional(),

  employed: Joi.boolean().optional(),

  phone: Joi.string()
    .regex(/^\\d{3}-\\d{3}-\\d{4}$/)
    .required(),

  address: Joi.object({
    street: Joi.string().min(3).required(),
    city: Joi.string().min(3).required(),
    state: Joi.string().min(3).required(),
    zip: Joi.number().min(3).required(),
  }).required(),

 hobbies: Joi.array().items(Joi.string()).required(),

}).options({ abortEarly: false });

Itu userSchema mendefinisikan kendala berikut untuk setiap properti:

  • surel: Harus string email yang valid.
  • kata sandi: Harus berupa string dengan minimal 6 karakter.
  • usia: Angka opsional dengan nilai minimum 18.
  • dipekerjakan: Boolean opsional.
  • telepon: Diperlukan string yang cocok dengan ekspresi regex yang ditentukan (/^\d{3}-\d{3}-\d{4}$/).
  • alamat: Objek yang mewakili alamat pengguna dengan sub-properti berikut.
    • jalan: Sebuah string wajib dengan panjang minimal 3 karakter.
    • kota: Sebuah string wajib dengan panjang minimal 3 karakter.
    • negara: Sebuah string wajib dengan panjang minimal 3 karakter.
    • ritsleting: Angka wajib dengan nilai minimum 3.
  • hobi: Array string yang diperlukan.

Selain kendala tersebut, userSchema mengatur batalkan lebih awal pilihan untuk PALSU. Secara default, Joi menghentikan eksekusi program segera setelah menemukan kesalahan pertama dan mencetak kesalahan ke konsol. Namun, menyetel opsi ini ke PALSU memastikan bahwa Joi memeriksa seluruh skema dan mencetak semua kesalahan yang ditemui ke konsol.

Memvalidasi Data Dengan Joi

Membuat validasi.js file dan menambahkan userSchema kode untuk itu.

Seperti itu:

 
const Joi = require("joi");

const userSchema = Joi.object({
}).options({ abortEarly: false });

module.exports = userSchema;

Kemudian, buat middleware yang mencegat payload permintaan dan memverifikasinya dengan skema yang disediakan dengan menambahkan kode berikut di bawah userSchema kode.

 const validationMiddleware = (schema) => {
  return (req, res, next) => {
    const { error } = schema.validate(req.body);

    if (error) {
      
      console.log(error.message);

      res.status(400).json({ errors: error.details });
    } else {
      
      next();
    }
  };
};

Ketika permintaan dibuat, middleware memanggil mengesahkan metode dari skema untuk memvalidasi badan permintaan. Jika terjadi kesalahan validasi, middleware mengirimkan a 400 permintaan Buruk respons dengan pesan kesalahan yang diambil dari detail kesalahan validasi.

Di sisi lain, jika validasi lolos tanpa kesalahan, middleware memanggil Berikutnya() fungsi.

Terakhir, ekspor file validasiMiddleware Dan userSchema.

 module.exports = {
  userSchema,
  validationMiddleware,
};

Menguji Kendala Validasi

Impor validasiMiddleware Dan userSchema ke dalam Anda router.js file dan atur middleware seperti ini:

 const { validationMiddleware, userSchema } = require("./validation");

router.post("/signup", validationMiddleware(userSchema), demoHandler);

Mulai aplikasi Anda dengan menjalankan perintah di bawah ini:

 node index.js

Kemudian, buat permintaan HTTP POST ke localhost:3000/pendaftaran menggunakan data uji di bawah ini. Anda dapat mencapai ini menggunakan cURL atau klien API lainnya.

 {
  "email": "user@example",
  "password": "pass",
  "age": 15,
  "employed": true,
  "hobbies": ["reading", "running"],
  "phone": "123-456-789",
  "address": {
    "street": "123",
    "city": "Example City",
    "state": "Example State",
    "zip": 12345
  }
}

Permintaan ini akan gagal dan mengembalikan objek kesalahan karena payload berisi banyak bidang yang tidak valid, seperti email, kata sandi, usia, dan telepon. Dengan menggunakan objek kesalahan yang disediakan, Anda dapat menangani kesalahan dengan tepat.

Menyederhanakan Validasi Data Dengan Joi

Di sini Anda membahas sebagian besar dasar validasi data menggunakan Joi. Namun, Anda dapat membahas teknik dan kendala yang lebih canggih dalam dokumentasi Joi.

Joi menyederhanakan tugas validasi data dalam JavaScript, memberikan solusi intuitif yang secara signifikan meningkatkan keandalan dan integritas data yang disimpan dalam aplikasi Anda.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad