@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() }); } // Создание нового пользователя }); |