Привет всем, у вас есть идея, почему мой официант продолжает игнорировать мою отправку электронной почты после транзакции Sequelize.commit()
Сначала я поместил эту процедуру отправки электронной почты на свой контроллер, но такой идеал устарел, поскольку процедура не так уж сложна...
Во-вторых, я попытался сделать это с помощью try { ... } catch { ... }, но этот тип процесса прост, поэтому я попытался упростить его, и на самом деле это не помогло решить мою проблему...
[EDIT]
Код возвращает 201 ответ, поэтому мне было интересно, почему мою процедуру sendEmail постоянно игнорируют.
Ищу способ...
async createTicket(req) {
return new Promise((resolve, reject) => {
const busboy = Busboy({ headers: req.headers });
const fields = {};
const uploadedFiles = [];
const ticket_id = uuidv4();
fields.id = ticket_id;
busboy.on("field", (key, value) => {
fields[key] = value;
});
busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
if (!filename) return;
const original = typeof filename === "string" ? filename : filename?.filename;
const blobName = `${Date.now()}-${original}`;
const chunks = [];
file.on("data", (chunk) => chunks.push(chunk));
file.on("end", async () => {
const buffer = Buffer.concat(chunks);
const ext = blobName.split(".").pop().toLowerCase();
const safeMime = mime.lookup(ext) || mimetype || "application/octet-stream";
const uploaded = await FileUploadService.uploadBuffer(blobName, safeMime, buffer);
uploadedFiles.push({
filename: blobName,
file_type: ext,
mime_type: safeMime,
file_url: uploaded.url,
size: buffer.length
});
});
});
busboy.on("finish", async () => {
const transaction = await mdl_Tickets.sequelize.transaction();
try {
const userProfile = await mdl_UserProfile.findOne({
where: { user_id: fields.user_id },
transaction
});
if (!userProfile) {
await transaction.rollback();
return reject({
message: "User profile does not exist. Complete profile first."
});
}
const ticket = await mdl_Tickets.create(fields, { transaction });
for (const fileItem of uploadedFiles) {
await mdl_Files.create(
{
...fileItem,
uploaded_by: fields.user_id,
ticket_id
},
{ transaction }
);
}
await transaction.commit();
try {
const credentials = await mdl_UserCredentials.findOne({
where: { user_id: ticket.user_id },
attributes: ["email"]
});
if (credentials?.email) {
const { html, subject } = await EmailTemplate.as_renderAll("tickets", {
user: credentials,
ticket,
subject: "New ticket issued"
});
await sendEmail({
to: credentials.email,
subject,
html
});
console.log("[TicketService] Email sent to:", credentials.email);
} else {
console.warn("[TicketService] No email found for user:", ticket.user_id);
}
} catch (emailErr) {
console.error("[TicketService] Email error:", emailErr);
}
io.emit("tickets:new", ticket);
resolve({
ticket,
attachments: uploadedFiles.map((f) => f.filename)
});
} catch (err) {
await transaction.rollback();
reject(err);
}
});
req.pipe(busboy);
});
}
[EDIT]
Функция sendEmail взята из моего nodemailer
const sendEmail = async (options) => {
const { to, subject, html } = options;
try {
const result = transporter.sendMail({})
........
Подробнее здесь: https://stackoverflow.com/questions/798 ... email-smtp
Официант с sendEmail (SMTP) ⇐ Javascript
Форум по Javascript
1763899660
Anonymous
Привет всем, у вас есть идея, почему мой официант продолжает игнорировать мою отправку электронной почты после транзакции Sequelize.commit()
Сначала я поместил эту процедуру отправки электронной почты на свой контроллер, но такой идеал устарел, поскольку процедура не так уж сложна...
Во-вторых, я попытался сделать это с помощью try { ... } catch { ... }, но этот тип процесса прост, поэтому я попытался упростить его, и на самом деле это не помогло решить мою проблему...
[EDIT]
Код возвращает 201 ответ, поэтому мне было интересно, почему мою процедуру sendEmail постоянно игнорируют.
Ищу способ...
async createTicket(req) {
return new Promise((resolve, reject) => {
const busboy = Busboy({ headers: req.headers });
const fields = {};
const uploadedFiles = [];
const ticket_id = uuidv4();
fields.id = ticket_id;
busboy.on("field", (key, value) => {
fields[key] = value;
});
busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
if (!filename) return;
const original = typeof filename === "string" ? filename : filename?.filename;
const blobName = `${Date.now()}-${original}`;
const chunks = [];
file.on("data", (chunk) => chunks.push(chunk));
file.on("end", async () => {
const buffer = Buffer.concat(chunks);
const ext = blobName.split(".").pop().toLowerCase();
const safeMime = mime.lookup(ext) || mimetype || "application/octet-stream";
const uploaded = await FileUploadService.uploadBuffer(blobName, safeMime, buffer);
uploadedFiles.push({
filename: blobName,
file_type: ext,
mime_type: safeMime,
file_url: uploaded.url,
size: buffer.length
});
});
});
busboy.on("finish", async () => {
const transaction = await mdl_Tickets.sequelize.transaction();
try {
const userProfile = await mdl_UserProfile.findOne({
where: { user_id: fields.user_id },
transaction
});
if (!userProfile) {
await transaction.rollback();
return reject({
message: "User profile does not exist. Complete profile first."
});
}
const ticket = await mdl_Tickets.create(fields, { transaction });
for (const fileItem of uploadedFiles) {
await mdl_Files.create(
{
...fileItem,
uploaded_by: fields.user_id,
ticket_id
},
{ transaction }
);
}
await transaction.commit();
try {
const credentials = await mdl_UserCredentials.findOne({
where: { user_id: ticket.user_id },
attributes: ["email"]
});
if (credentials?.email) {
const { html, subject } = await EmailTemplate.as_renderAll("tickets", {
user: credentials,
ticket,
subject: "New ticket issued"
});
await sendEmail({
to: credentials.email,
subject,
html
});
console.log("[TicketService] Email sent to:", credentials.email);
} else {
console.warn("[TicketService] No email found for user:", ticket.user_id);
}
} catch (emailErr) {
console.error("[TicketService] Email error:", emailErr);
}
io.emit("tickets:new", ticket);
resolve({
ticket,
attachments: uploadedFiles.map((f) => f.filename)
});
} catch (err) {
await transaction.rollback();
reject(err);
}
});
req.pipe(busboy);
});
}
[EDIT]
Функция sendEmail взята из моего nodemailer
const sendEmail = async (options) => {
const { to, subject, html } = options;
try {
const result = transporter.sendMail({})
........
Подробнее здесь: [url]https://stackoverflow.com/questions/79827840/busboy-with-sendemail-smtp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия