【问题标题】:ReferenceError: XMLHttpRequest is not defined in emailjsReferenceError: XMLHttpRequest 未在 emailjs 中定义
【发布时间】:2021-12-27 18:15:42
【问题描述】:

我在提交表单后尝试使用 emailjs 向用户发送电子邮件,但出现此错误:

FAILED... ReferenceError: XMLHttpRequest is not defined
    at C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\emailjs-com\cjs\api\sendPost.js:8:21     
    at new Promise (<anonymous>)
    at Object.sendPost (C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\emailjs-com\cjs\api\sendPost.js:7:12)
    at Object.send (C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\emailjs-com\cjs\methods\send\send.js:25:23)
    at C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\routes\index.js:197:11
    at Layer.handle [as handle_request] (C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\express\lib\router\route.js:137:13)    at Route.dispatch (C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\express\lib\router\layer.js:95:\lib\router\layer.js:95:5)
    at C:\Users\Awesome\Desktop\Awesome\Websites\Client Websites\alumates-landing-page\node_modules\express\lib\router\index.js:281:22

根据报错,emailjs的sendpost.js中没有定义XMLHttpRequest

我没有修改这个文件。我只是使用常规方式安装了 emailjs

npm install emailjs-com --save

请问,有人知道怎么解决吗?这是我的路线:

router.post('/groups/join', function (req, res) {

//handle form submission here

var templateParams = {
    url: url,
    group_name: group_name, //gotten from form submission value
    user_name: joinRequest.user_name, //gotten from form submission value
    email: joinRequest.email //gotten from form submission value
  }

  emailjs.send(serviceID, groupID, templateParams)
    .then(function (response) {
      console.log('SUCCESS!', response.status, response.text);
      res.redirect("/login")
    }, function (error) {
      console.log('FAILED...', error);
    });

})

我还需要 emailjs 和 xhr 在我的路线顶部:

var xhr = require("xhr");
var emailjs = require("emailjs-com");
emailjs.init("user_CPxhncQgw2s5e4nNwbu36")

【问题讨论】:

  • 有同样的问题。有更新吗?
  • 只使用适用于 Node 的库,而不是浏览器,就可以了。
  • 不,我无法解决问题。我不得不寻找另一种选择。我现在使用 Nodemailer,而不是 emailjs

标签: javascript node.js express email


【解决方案1】:

您必须将emailjs.send 方法移至前端。我什至安装了 xhr2 并替换了模块中的代码。我收到一条日志说 emailjs 不适用于非浏览器应用程序。

【讨论】:

    【解决方案2】:

    要在节点 js 中使用 XHR,您需要使用外部库,例如 xhr2 首先,安装它

     npm install xhr2
    

    现在,需要它

     var XMLHttpRequest = require('xhr2');
     var xhr = new XMLHttpRequest();
    

    【讨论】:

    • 错误来自我安装的包,而不是我自己的代码。根据参考错误,错误来自“node_modules\emailjs-com\cjs\api\sendPost.js:8:21”我已经卸载并重新安装了包,但仍然出现错误。我也多次安装和卸载 xhr2。错误仍然存​​在。
    【解决方案3】:

    这些都没有任何意义。 Email.js 针对浏览器及其 API。在顶部导入 xhr 没有区别;它不会使 XHR API 在 Node 的全局范围内可用。

    如果您真的想使用它,您需要使用 xhr 包来存根 XHR 实现以创建骨架,但这是真的错误的方法。只需找到一个针对 Node 的电子邮件库即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2013-10-23
      • 2019-02-11
      • 2015-10-04
      • 2017-04-10
      相关资源
      最近更新 更多