我一直在嘗試制作一個快速中間件,在之前的中間件完成后使用 Nodemailer 發送電子郵件。我想出了一些不同的設計,但最終每個不同的版本都有它的缺點。
最終,我希望中間件能夠從之前的中間件中得到回應。如果成功,則發送成功郵件,否則,發送錯誤郵件。
我想出了一個雙重設計,其中一個變體推送到錯誤中間件,成功導致下一個中間件。這包含發送多個標頭的一些小問題,特別是第二個中間件錯誤。我可以說,如果郵件出錯,什么也不做。但這似乎不對。如果有人對好的設計有任何建議,那就太好了。
uj5u.com熱心網友回復:
根據您的描述,我建議不要為此創建不同的中間件,而只創建一個可以處理不同型別訊息的通用電子郵件功能。然后,只需在第一個中間件中使用該函式并根據用例(成功/錯誤)傳遞不同的引數。
電子郵件控制器.js
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: true,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASSWORD,
},
});
exports.send_email_message = (send_to, subject, message) => {
return new Promise((resolve, reject) => {
const email_message = {
from: { name: process.env.EMAIL_FRIENDLY_NAME },
to: send_to,
subject: subject,
text: message
};
transporter.sendMail(email_message).then(() => {
resolve(true);
}).catch((error) => {
reject(false);
});
})
}
自定義路由器.js
const { send_email_message } = require('./email-controller');
const express = require('express');
const router = express.Router();
router.get('/custom-middleware', async (req, res, next) => {
try {
// You can calculate "success" variable based on your custom logic
if(success){
await send_email_message('[email protected]', 'Success', 'This is body of success message.');
return res.status(200).json({ success: true });
} else {
await send_email_message('[email protected]', 'Error', 'This is body of error message.');
return res.status(400).json({ success: false });
}
} catch(error) {
return res.status(400).json({ success: false });
}
});
module.exports = router;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/435668.html
標籤:javascript 节点.js 表示 中间件
