Невозможно отправить письмо по асинхронному маршруту с помощью Express и NodeMailer - PullRequest
0 голосов
/ 13 января 2019

Выпуск

У меня возникают проблемы при попытке отправить электронное письмо с NodeMailer после сохранения некоторых данных в файл с помощью модуля fs.

* 1005 Сводка * У меня есть маршрут API, который принимает некоторые очень простые данные JSON: { "name": "Some Name", "email": "example@gmail.com", "linkedIn": "https://linkedin.com/38473289472", "comments": "" } Когда мой маршрут получает эти данные, он пытается сохранить эти данные в файл JSON. Он делает это, читая текущий файл JSON, чтобы увидеть, существует ли человек, и если нет, он записывает в файл. Это прекрасно работает, но моя проблема в том, когда я пытаюсь отправить электронное письмо после того, как происходит этот процесс. Вот код в полном объеме: const fs = require('fs'); const nodemailer = require('nodemailer'); const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'myemail@email.com', pass: 'somecoolpassword', }, }); const mailOptions = { from: 'myemail@email.com', to: 'myemail@email.com', subject: 'subject', html: `test`, }; // This is the route exports.register = async (req, res) => { try { await addApplicant(req.body); await transporter.sendMail(mailOptions); // Does not send res.sendStatus(200); } catch (err) { res.send(err); } }; const addApplicant = async applicant => { return new Promise(async (resolve, reject) => { fs.readFile('./applicants/applicants.json', 'utf8', async (err, data) => { if (err) reject('There was an error accessing the applicants master file.'); const allApplicants = JSON.parse(data); if (allApplicants.hasOwnProperty(applicant.email)) { reject('User already exists.'); } const updatedApplicants = JSON.stringify({ ...allApplicants, [applicant.email]: { ...applicant }, }); await writeToJsonFile(updatedApplicants); resolve(); }); }); }; const writeToJsonFile = async updatedApplicants => { return new Promise(async (resolve, reject) => { fs.writeFile('./applicants/applicants.json', updatedApplicants, err => { if (err) reject('There was an error saving the applicants information'); resolve(); }); }); }; Если я изменю маршрут регистрации для отправки электронного письма ДО того, как я начну использовать файловую систему, он отправляет электронное письмо и выполняет надлежащие операции с файлами. exports.register = async (req, res) => { try { await transporter.sendMail(mailOptions); // works await addApplicant(req.body); res.sendStatus(200); } catch (err) { res.send(err); } }; Что я здесь не так делаю? Честно говоря, это должно быть что-то настолько тривиальное, но я просто сейчас не вижу этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...