Pengesahan Input dengan Joi/Express-Validator
Sahkan data permintaan masuk menggunakan pustaka berkuasa seperti Joi atau express-validator bagi memastikan integriti data.
Pengesahan Input dengan Joi/Express-Validator ialah pelajaran Kem Intensif Pembangunan Backend Node.js percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kem Intensif Pembangunan Backend Node.js, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 4 pelajaran.
Mengapa Mengesahkan Input?
Pengesahan input ialah amalan penting untuk keselamatan dan integriti data. Amalan ini memastikan data yang diterima oleh aplikasi anda bersih, betul dan selamat untuk diproses.
Tanpa pengesahan yang betul, aplikasi anda terdedah kepada:
- Pelanggaran keselamatan: Seperti suntikan SQL atau Skrip Silang Tapak (XSS).
- Kerosakan data: Data yang cacat boleh merosakkan aplikasi atau pangkalan data anda.
- Pengalaman pengguna yang kurang baik: Data yang tidak konsisten membawa kepada pepijat dan kelakuan yang tidak dijangka.
Data Tanpa Pengesahan: Risiko Keselamatan
Bayangkan pengguna menghantar borang tanpa pengesahan. Mereka boleh menghantar:
- Medan kosong: Maklumat yang diperlukan tiada.
- Jenis data yang salah: Medan nombor menerima teks.
- Skrip berniat jahat: Kod yang direka untuk mengeksploitasi sistem anda.
Pengesahan bertindak sebagai penjaga pintu yang menghalang data buruk daripada memasuki teras aplikasi anda.
Joi: Tentukan Bentuk Data Anda
Joi ialah bahasa penerangan skema dan pengesah data yang berkuasa untuk JavaScript. Ia membolehkan anda menentukan struktur, jenis dan kekangan data menggunakan API yang jelas serta boleh dirantaikan.
Anggap skema Joi sebagai pelan tindakan untuk data yang dijangka. Sebarang data yang tidak sepadan dengan pelan ini akan ditandai sebagai tidak sah.
Skema Joi dalam Tindakan
Berikut ialah skema Joi ringkas untuk nama dan umur pengguna. Cuba jalankannya untuk melihat cara pengesahan berfungsi. Ingat untuk memasang Joi terlebih dahulu (npm install joi).
const Joi = require('joi');
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
age: Joi.number().integer().min(0).max(120).required()
});
async function runValidation() {
const validUser = { username: 'john_doe', age: 30 };
const invalidUser = { username: 'ab', age: 'twenty' };
console.log('--- Valid User Test ---');
try {
const value = await userSchema.validateAsync(validUser);
console.log('Validation successful for validUser!');
} catch (err) {
console.error('Validation failed for validUser:', err.details[0].message);
}
console.log('\n--- Invalid User Test ---');
try {
const value = await userSchema.validateAsync(invalidUser);
console.log('Validation successful for invalidUser!');
} catch (err) {
console.error('Validation failed for invalidUser:', err.details[0].message);
}
}
runValidation();Joi dalam Laluan Express
Untuk menggunakan Joi dalam aplikasi Express.js, biasanya anda mencipta fungsi perisian tengah yang melaksanakan pengesahan sebelum pengendali laluan dijalankan. Hal ini memastikan pengendali laluan anda bersih dan tertumpu pada logik perniagaan.
const express = require('express');
const Joi = require('joi');
const app = express();
const port = 3000;
app.use(express.json()); // For parsing application/json
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
email: Joi.string().email().required(),
password: Joi.string().min(6).required()
});
// Middleware to validate request body using Joi
const validateUser = (req, res, next) => {
const { error } = userSchema.validate(req.body);
if (error) {
return res.status(400).send(error.details[0].message);
}
next(); // If validation passes, proceed to the route handler
};
app.post('/register', validateUser, (req, res) => {
// If we reach here, req.body is valid
res.status(201).send('User registered successfully!');
});
app.get('/', (req, res) => {
res.send('Server is running. Try POST to /register with JSON data.');
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
console.log('Try: POST http://localhost:3000/register with {\"username\":\"testuser\", \"email\":\"a@b.com\", \"password\":\"password123\"}');
console.log('Or with invalid data: {\"username\":\"ab\", \"email\":\"a@b.com\"}');
});Express-Validator: Kuasa Perisian Tengah
Express-Validator ialah sekumpulan perisian tengah Express.js yang membungkus pustaka validator.js yang berkuasa. Ia memfokuskan pada pengesahan dan pembersihan data secara terus dalam kitaran permintaan Express.
Ia sering menjadi pilihan kerana penyepaduannya yang lancar dengan laluan Express, yang membolehkan anda merantaikan beberapa peraturan pengesahan secara terus dalam takrif laluan.
Express-Validator dalam Tindakan
Berikut ialah cara menggunakan express-validator untuk mengesahkan e-mel dan kata laluan secara terus dalam laluan Express. Perhatikan fungsi check() dan validationResult(). Ingat untuk memasang Express-Validator (npm install express-validator).
const express = require('express');
const { check, validationResult } = require('express-validator');
const app = express();
const port = 3000;
app.use(express.json());
app.post('/login', [
check('email', 'Email is required').notEmpty(),
check('email', 'Please include a valid email').isEmail(),
check('password', 'Password must be 6 or more characters').isLength({ min: 6 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// If we reach here, req.body is valid
res.send('User logged in successfully!');
});
app.get('/', (req, res) => {
res.send('Server is running. Try POST to /login with JSON data.');
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
console.log('Try: POST http://localhost:3000/login with {\"email\":\"user@example.com\", \"password\":\"password123\"}');
console.log('Or with invalid data: {\"email\":\"bademail\", \"password\":\"123\"}');
});Memberikan Tindak Balas terhadap Ralat Pengesahan
Apabila pengesahan gagal, API anda hendaklah mengembalikan mesej ralat yang jelas dan bermaklumat kepada klien. Joi dan Express-Validator kedua-duanya menyediakan cara untuk mengekstrak ralat ini.
- Joi: Objek
errormengandungidetailsdengan mesej khusus. - Express-Validator:
validationResult(req)mengumpulkan semua ralat ke dalam tatasusunan, yang selalunya merangkumi nama medan dan mesej.
Sentiasa kembalikan kod status HTTP yang sesuai, seperti 400 Bad Request, untuk menunjukkan masalah input pada pihak klien.
Joi berbanding Express-Validator: Buat Pilihan dengan Bijak
Kedua-dua pustaka ini sangat baik, tetapi masing-masing unggul dalam keadaan yang berbeza:
- Joi: Sesuai untuk struktur data kompleks dan bersarang. Sangat baik untuk menentukan skema ketat bagi keseluruhan model data anda, dan sering digunakan untuk pengesahan DTO (Objek Pemindahan Data).
- Express-Validator: Sesuai untuk pengesahan pantas dan sebaris bagi parameter permintaan (badan, pertanyaan, parameter) secara terus dalam laluan Express anda. Pendekatan perisian tengahnya bersepadu dengan lancar.
Anda juga boleh menggunakan kedua-duanya! Gunakan Joi untuk model data teras dan Express-Validator untuk semakan khusus laluan yang lebih ringkas.
Semakan Pengesahan
Pertimbangkan pernyataan berikut tentang pengesahan input dengan Joi dan Express-Validator:
Imbas Kembali: Lindungi Input Anda
Tahniah! Anda telah mempelajari kepentingan pengesahan input dan cara melaksanakannya menggunakan dua pustaka Node.js yang popular:
- Joi: Untuk menentukan peraturan pengesahan berasaskan skema yang kukuh bagi data kompleks.
- Express-Validator: Untuk pengesahan berasaskan perisian tengah yang ringan secara terus dalam laluan Express anda.
Sentiasa sahkan data masuk untuk melindungi aplikasi anda daripada kerentanan dan memastikan integriti data. Teruskan membina API yang selamat dan boleh dipercayai!
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 22
- Pelajaran
- 92
Soalan Lazim
Adakah pelajaran “Pengesahan Input dengan Joi/Express-Validator” percuma?
Ya — teks penuh “Pengesahan Input dengan Joi/Express-Validator” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Kem Intensif Pembangunan Backend Node.js, tingkat taraf kepada CoddyKit PRO. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengesahan Input dengan Joi/Express-Validator”?
Sahkan data permintaan masuk menggunakan pustaka berkuasa seperti Joi atau express-validator bagi memastikan integriti data. Anda berlatih Kem Intensif Pembangunan Backend Node.js menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Kem Intensif Pembangunan Backend Node.js?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kem Intensif Pembangunan Backend Node.js di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Pengesahan Input dengan Joi/Express-Validator” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kem Intensif Pembangunan Backend Node.js ini?
Ya. Setiap pelajaran Kem Intensif Pembangunan Backend Node.js menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Membangunkan Perisian Tengah Express Tersuai
- Strategi Pengendalian Ralat Global
- Pengesahan Input dengan Joi/Express-Validator
- Perisian Tengah Pengesahan dengan JWT