如何通过API获取dynamic_template_data而非硬编码(Node.js实现)
Node.js 从API获取dynamic_template_data替代硬编码实现
核心逻辑很简单:先通过API请求拿到数据库返回的动态数据,再将这个数据直接赋值给dynamic_template_data字段,替换掉硬编码的内容即可。下面是具体实现步骤和示例代码:
1. 编写API请求函数获取动态数据
你可以用Node.js内置的fetch(Node.js 18+支持)或者第三方库axios调用数据库API,拿到订单、用户等所需的动态数据:
// 用内置fetch的示例(Node.js 18+) async function getDynamicTemplateData() { try { // 替换为你的数据库API地址 const response = await fetch('https://your-api-domain/order-info'); if (!response.ok) { throw new Error(`API请求失败: ${response.status}`); } // 解析返回的JSON数据,需和模板字段结构匹配 const data = await response.json(); return data; } catch (error) { console.error('获取动态数据出错:', error); throw error; // 抛出错误交由上层处理 } } // 用axios的示例(需先执行npm install axios) const axios = require('axios'); async function getDynamicTemplateData() { try { const response = await axios.get('https://your-api-domain/order-info'); return response.data; } catch (error) { console.error('获取动态数据出错:', error); throw error; } }
2. 整合到SendGrid邮件发送流程
调用上述函数拿到数据后,直接赋值给dynamic_template_data,再调用SendGrid的邮件发送接口:
const sgMail = require('@sendgrid/mail'); // 从环境变量读取API密钥,避免硬编码 sgMail.setApiKey(process.env.SENDGRID_API_KEY); async function sendDynamicEmail() { try { // 第一步:获取动态数据 const dynamicData = await getDynamicTemplateData(); // 第二步:构造邮件参数,用动态数据替换硬编码内容 const msg = { to: 'user@example.com', // 收件人邮箱 from: 'service@your-domain.com', // 已在SendGrid验证的发件人邮箱 templateId: 'd-xxxxxxxxxxxxxx', // 你的动态模板ID dynamic_template_data: dynamicData // 直接使用API返回的动态数据 }; // 发送邮件 await sgMail.send(msg); console.log('邮件发送成功'); } catch (error) { console.error('邮件发送出错:', error.response?.body || error.message); } } // 执行邮件发送 sendDynamicEmail();
注意事项
- 确保API返回的数据结构和SendGrid动态模板的字段完全匹配,比如模板中使用
{{total}},API返回的数据就必须包含total字段。 - 做好错误捕获,避免因API请求失败导致邮件发送流程异常。
内容的提问来源于stack exchange,提问作者Pajama_Jeans
相关产品推荐
相关产品推荐

