【发布时间】:2021-10-21 18:48:36
【问题描述】:
我正在尝试以一种有组织的方式进行身份验证,其中包含如下控制器和服务。尽管找到一种将错误消息从服务传递到控制器的方法一直很困难。用户已保存,但如果我想检查它,该电子邮件已经存在,则没有任何反应。
控制器:
const { isEmail, isEmpty } = require("../middleware/authMiddlewareValidators");
const { newUser } = require("../services/authServices");
// Register
exports.register = async (req, res) => {
const { firstName, lastName, email, password } = req.body;
if (isEmpty(email)) {
res.status(400).json({ message: "Email must not be empty" });
return;
}
if (!isEmail(email)) {
res.status(400).json({ message: "Please provide a valid email adress" });
return;
}
if (isEmpty(password)) {
res.status(400).json({ message: "Password must not be empty" });
return;
}
if (password.length < 6) {
res
.status(400)
.json({ message: "Password must have at least 6 characters" });
return;
}
try {
await newUser(firstName, lastName, email, password)
res.status(200).json({ message: "signup success! please login." });
} catch (error) {
console.log(error);
res.status(500).json({message: error})
}
};
服务:
const User = require("../models/User-model");
const bcrypt = require("bcryptjs");
const passport = require("passport");
const { transporter } = require("../configs/nodemailer");
exports.newUser = async (firstName, lastName, email, password) => {
try {
let user = await User.findOne({ email });
if (user) {
throw new Error("This email is already taken");
} else {
const salt = bcrypt.genSaltSync(10);
const hashPass = bcrypt.hashSync(password, salt);
const newUser = new User({
firstName: firstName,
lastName: lastName,
email: email,
password: hashPass,
});
newUser.save(() => {
transporter.sendMail({
to: newUser.email,
from: process.env.SCHOOLSCOOL_EMAIL,
subject: "Succefull register!",
html: `<p>Welcome to School's Cool ${newUser.firstName} ${newUser.lastName}, <br>
<br> Please login to use the web application. <br><br> Thank you.</p>`,
});
});
}
} catch (error) {
throw new Error(error.message);
}
};
不确定我做错了什么,但如果用户已经存在,我无法传递消息...
【问题讨论】:
标签: javascript node.js mongodb express mongoose