如何用MarkLogic和JavaScript发送含REST API JSON生成的Excel附件的邮件?
使用MarkLogic + JavaScript发送带Excel附件的邮件
核心步骤
1. 准备Excel生成依赖
MarkLogic的Server-Side JavaScript支持引入npm模块,我们用xlsx库处理JSON到Excel的转换。先通过mlpm(MarkLogic包管理器)安装模块:
mlpm install xlsx
安装完成后,模块会部署到MarkLogic的Modules数据库,可直接在JS代码中require调用。
2. 从REST API获取JSON数据
用xdmp.httpGet调用目标API并解析响应:
// 调用REST API获取JSON数据 const apiResponse = xdmp.httpGet('http://your-api-endpoint', { headers: { 'Accept': 'application/json' } }); const jsonDataset = JSON.parse(apiResponse.body.toString());
3. 将JSON转换为Excel二进制Buffer
封装转换函数,把JSON数据集转成Excel文件的二进制Buffer:
const XLSX = require('xlsx'); function convertJsonToExcel(jsonData) { // 将JSON转为工作表 const worksheet = XLSX.utils.json_to_sheet(jsonData); // 创建工作簿并添加工作表 const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, '业务数据'); // 生成二进制Buffer(xlsx格式) return XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }); } // 生成Excel Buffer const excelBuffer = convertJsonToExcel(jsonDataset);
4. 构建邮件并发送
使用xdmp.sendMail函数,重点配置附件的contentType和encoding:
xdmp.sendMail({ to: ['user@example.com'], from: 'noreply@your-domain.com', subject: 'API数据导出报告', // 支持HTML或纯文本正文 body: '<h3>数据导出报告</h3><p>附件为从REST API获取的最新数据,格式为Excel。</p>', contentType: 'text/html', attachments: [ { filename: 'api-data-report.xlsx', // Excel文件的MIME类型必须正确 contentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', content: excelBuffer, encoding: 'binary' // 对应二进制Buffer的编码方式 } ] });
关键注意事项
- 权限配置:执行代码的用户需拥有
send-mail权限,以及访问目标REST API的网络权限。 - SMTP设置:MarkLogic需提前配置好SMTP服务器(通过管理界面或
xdmp.setSmtpServer函数),否则无法发送邮件。 - 附件完整性:如果Excel文件损坏,检查:
- JSON数据格式是否合法(无嵌套过深或特殊字符问题)
contentType是否正确(不要用旧的application/vnd.ms-excel,这对应xls格式)encoding是否设为binary(对应Buffer类型的内容)
- 模块部署:如果
require('xlsx')报错,确认模块已正确部署到Modules数据库的对应路径(通常是/node_modules/xlsx/)。
内容的提问来源于stack exchange,提问作者swat
相关产品推荐
相关产品推荐

