Проверьте дубликат электронной почты с сервера в NodeJS

#node.js #express

Вопрос:

Я работаю в проекте MERN. я вставляю данные формы в свою базу данных. Я успешно вставил все данные формы.

Но я хочу проверить, что если какой-либо пользователь собирается зарегистрировать дубликат электронной почты, он должен выдать пользователю ошибку

Ошибка, которую я получаю в терминале vscode

 Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client  at ServerResponse.setHeader (_http_outgoing.js:561:11)  at ServerResponse.header (C:UserskumarDesktopkridhatutorservernode_modulesexpresslibresponse.js:771:10)  at ServerResponse.send (C:UserskumarDesktopkridhatutorservernode_modulesexpresslibresponse.js:170:12)  at ServerResponse.json (C:UserskumarDesktopkridhatutorservernode_modulesexpresslibresponse.js:267:15)  at C:UserskumarDesktopkridhatutorserverrouterAuth.js:105:37  at processTicksAndRejections (internal/process/task_queues.js:95:5) {  code: 'ERR_HTTP_HEADERS_SENT'  

И в моем браузере я получаю —«Электронная почта уже существует»—

Для этого я попробовал это

   const storage = multer.diskStorage({  destination: function (req, file, cb) {  let email = req.body.email;  let path = `C:/Users/kumar/Desktop/kridhatutor/server/images/${email}`;  fs.mkdirsSync(path);  cb(null, path);  // cb(null, 'images');  },  filename: function (req, file, cb) {  cb(null, file.originalname);   } });   const fileFilter = (req, file, cb) =gt; {  const allowedFileTypes = ['image/jpeg', 'image/jpg', 'image/png'];  if (allowedFileTypes.includes(file.mimetype)) {  cb(null, true);  } else {  cb(null, false);  } }  let upload = multer({ storage, fileFilter });  router.post('/teacherregister', upload.fields([{  name: "profilephoto", maxCount: 1 }, {  name: "identityphoto", maxCount: 1 }, {  name: "tenthphoto", maxCount: 1 }, {  name: "twelvephoto", maxCount: 1 }, {  name: "latestphoto", maxCount: 1 } ]), (req, res) =gt; {     const names = req.body.names  const phone = req.body.phone  const email = req.body.email  const city = req.body.city  const address = req.body.address  const comfortable = req.body.comfortable  const classesyoutake = req.body.classesyoutake  const subjectsyoutake = req.body.subjectsyoutake  const teachingexprienceinyears = req.body.teachingexprienceinyears  const exprienceteaching = req.body.exprienceteaching  const profilephoto = req.files['profilephoto'][0]  const identityphoto = req.files['identityphoto'][0]  const tenthphoto = req.files['tenthphoto'][0]  const twelvephoto = req.files['twelvephoto'][0]  const latestphoto = req.files['latestphoto'][0]    try {  const userEx = TECAHER.findOne({ email: email })  if (userEx) {  res.status(400).json({ error: "Email already exit" })  // alert("email already exit")  }  const newUserData = {  names,  phone,  email,  city,  address,  comfortable,  classesyoutake,  subjectsyoutake,  teachingexprienceinyears,  exprienceteaching,  profilephoto,  identityphoto,  tenthphoto,  twelvephoto,  latestphoto      }    const newUser = new TECAHER(newUserData);  newUser.save()  .then(() =gt; res.json('User Added'))  .catch((err) =gt; {  console.log(err);  });      } catch (err) {  console.log(err)  }  })    //STUDENT--PARENT register  router.post("/register", async (req, res) =gt; {  const { identity, names, phone, email, city, address, subject, classes, message } = req.body  // if (!identity || !names || !phone || !email || !city || !address || !subject || !classes || !message) {  // return res.status(422).json({ error: "Please mark all the field" })  // }   try {  const userExit = await User.findOne({ email: email })  if (userExit) {  res.status(400).json({ error: "Email already exit" })  // alert("email already exit")   }  // else if (password != cpassword) {  // return res.status(422).json({ error: "password and confirm password don not match" })  // }   const user = new User({ identity, names, phone, email, city, address, subject, classes, message })  await user.save()  res.status(201).json({ message: "user registered successfulluy" })  } catch (err) {  console.log(err)  }  })  

Как проверить это условие?

Спасибо

Ответ №1:

После отправки сообщения об ошибке вы должны вернуться из своей функции:

 if (userEx) {  res.status(400).json({ error: "Email already exists" });  return; }  

В противном случае будет выполнена остальная часть функции, что приведет к отправке другого сообщения («Добавлен пользователь»). Но вы можете использовать res.json не более одного раза на запрос, в противном случае вы получите наблюдаемую ошибку.

Комментарии:

1. Теперь я понимаю это FormData { } Object { error: "Email already exit" }

2. Ставьте return перед каждым заявлением res