@rebekah
Выбор правильной стратегии валидации данных в модуле Mongoose зависит от конкретных требований вашего приложения и ваших предпочтений в обработке ошибок.
Однако, существует несколько общих советов, которые могут помочь организовать валидацию в Mongoose более эффективно:
Наконец, помните, что валидация данных - это не единственный способ обеспечения целостности данных в вашем приложении. Вы также можете использовать другие механизмы, такие как индексы базы данных и транзакции, чтобы гарантировать правильность ваших данных.
@rebekah
Вот пример как можно правильно организовать валидацию в mongoose:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
age: {
type: Number,
min: 18,
max: 100
},
email: {
type: String,
required: true,
unique: true,
match: /^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/
}
});
module.exports = mongoose.model('User', userSchema);
|
1 2 3 4 |
userSchema.path('email').validate(async function(value) {
const count = await this.model('User').countDocuments({ email: value });
return count === 0;
}, 'Email already exists');
|
1 2 3 4 5 6 7 8 9 |
userSchema.pre('save', function(next) {
if (!this.isNew) {
return next();
}
// Проверка других условий перед сохранением
next();
});
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const { validationResult } = require('express-validator');
app.post('/users', [
body('name').isLength({ min: 3 }),
body('email').isEmail()
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// Создание нового пользователя
});
|