Express使用emailjs-com报错ReferenceError: XMLHttpRequest is not defined如何解决
问题原因
emailjs-com是浏览器端专用的SDK,依赖浏览器原生提供的XMLHttpRequest API,而Node.js(Express运行环境)默认没有这个全局API,所以才会触发未定义的报错。你单独引入xhr包也没用,因为emailjs-com内部不会调用你引入的这个实例,还是会找全局的XMLHttpRequest。
修复方案(优先推荐)
- 第一步:卸载原有的浏览器端包
npm uninstall emailjs-com
- 第二步:安装EmailJS官方提供的Node.js服务端SDK
npm install @emailjs/nodejs --save
- 第三步:修改引入和初始化代码,替换原来的引入部分
const emailjs = require('@emailjs/nodejs'); // 初始化需要传公钥和私钥,私钥可以在EmailJS后台的安全设置里获取 emailjs.init({ publicKey: "user_CPxhncQgw2s5e4nNwbu36", privateKey: "你的EmailJS私钥", // 注意私钥不要泄露到前端代码,仅在服务端使用 });
- 第四步:原有的
emailjs.send调用逻辑不需要修改,直接就能正常运行。
不推荐的兼容方案(仅临时调试用)
如果你一定要继续使用emailjs-com,可以手动把XMLHttpRequest挂载到Node.js全局,但是稳定性没有保障,不适合生产环境使用:
首先安装兼容包:
npm install xhr2 --save
然后在引入emailjs-com之前添加全局挂载代码:
global.XMLHttpRequest = require('xhr2'); var emailjs = require("emailjs-com"); emailjs.init("user_CPxhncQgw2s5e4nNwbu36")
内容的提问来源于stack exchange,提问作者Awesome Bassey
相关产品推荐
相关产品推荐

