Я создаю API в NodeJS и MongoDB. API в целом просто управляет студентами и проектами. Мне нужно добавить новый маршрут, чтобы проверить, было ли уже занято письмо в БД. В качестве параметра мне нужно передать письмо от тела как req.body.email
, а затем проверить, доступно ли оно. Я пробовал 2 способа, но у меня ничего не получалось и не знаю, как это исправить.
Маршрут, который я сделал первым:
router.get("/check-email", async (req, res) => {
await Student.emailCheck(req.body.email, (error, student) => {
if (error) {
return next(error);
}
if (student) {
res.status(401).json({ error: "Email already used" });
} else {
res.json({ message: "Email is available" });
}
});
});
и модель:
const mongoose = require("../utilities/dbConnect");
require("mongoose-type-email");
const schema = {
name: {
type: String,
required: true
},
surname: {
type: String,
required: true
},
email: {
type: mongoose.SchemaTypes.Email,
required: true,
unique: true
},
dateOfBirth: {
type: String,
required: true
}
};
const collectionName = "student";
const studentSchema = mongoose.Schema(schema);
const Student = mongoose.model(collectionName, studentSchema);
const emailCheck = (email, cb) => {
Student.findOne({ email: email }).exec((error, student) => {
if (error) {
return cb(error);
}
cb(null, student);
});
};
module.exports = { Student, emailCheck };
Маршрут метода 2:
await validateEmailAccessibility(req.body.email).then(
valid => {
if (valid) {
res.send("Email is valid");
} else {
res.send("Email already used");
}
}
);
и использование утилита
let Student = require("../models/student.model");
const validateEmailAccessibility = async email => {
const result = await Student.findOne({ email: email });
return result !== null;
};
module.exports = validateEmailAccessibility;
Я хотел бы понять, как лучше всего достичь своей цели и что я делаю неправильно в моих отношениях.