Dal momento che non dovresti salvare una password semplice nel tuo database, non ha senso convalidare la password nel database. Perché dovresti prima eseguire l'hashing della password e poi salvarla. la password con hash sarà una stringa complessa che molto probabilmente supererà la convalida per essere salvata nel database.
Quindi devi convalidare la password sul lato client. per questo puoi usare il pacchetto joi npm.
https://www.npmjs.com/package/@hapi/joi
ecco come puoi implementarlo.
userModel.js //dovrebbe trovarsi nella cartella models
const Joi = require('@hapi/joi');
const mongoose = require("mongoose");
//you defined your schema above, it should be **lowercase**
//here is the model, model should start capital letter
const User=mongoose.model("User",userSchema)
function validateUser(user) {
const schema = Joi.object().keys({
email: Joi.string()
.min(8)
.max(50)
.required()
.email(),
password: Joi.string()
.min(6)
.required()
.max(20)
.regex(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,1024}$/) //special/number/capital
});
return Joi.validate(user, schema);
}
module.exports.User = User;
module.exports.validate = validateUser;
dimostrerò come utilizzare questa funzione all'interno di un router postale.
userRoute.js
//import model and validate func
const { User, validate } = require("/models/user");
router.post("/", async (req, res) => {
//validating the request here
const { error } = validate(req.body);
if (error) res.status(400).send(error.details[0].message);
//i used this code to show you how to use validate function
//i am not sure what is your project about
});