首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Netlify上设置Mailjet

在Netlify上设置Mailjet
EN

Stack Overflow用户
提问于 2018-08-23 10:01:37
回答 1查看 606关注 0票数 0

我试图通过Netlify Lambda发送一封电子邮件,lambda在没有Mailjet集成的情况下运行得很顺利,我已经在节点测试脚本中尝试了Mailjet集成

代码语言:javascript
复制
const { MJ_USER, MJ_PASSWORD } = process.env;
const mailjet = require('node-mailjet').connect(MJ_USER, MJ_PASSWORD)

exports.handler = async (event, context) => {

  if (event.httpMethod !== "POST") {
    return { statusCode: 405, body: "Method Not Allowed" };
  }

  const data = JSON.parse(event.body)

  const msg = { "Messages":[
          {
            "From": {
              "Email": "sender@gmail.com",
              "Name": "Paul"
            },
            "To": [
              {
                "Email": "receiver@gmail.com",
                "Name": "Emma"
              }
            ],
            "TemplateID": 511035,
            "TemplateLanguage": true,
            "Subject": "Test mail",
            "Variables": {
                            "input":  "Test"
                        }
          }
    ]}

  mailjet.post("send", {'version': 'v3.1'}).request(msg)
         .then((result) => {
           return{ statusCode: 200, body: result.body}
         }).catch((err) => {
          return err 
         })

}

导致

代码语言:javascript
复制
{"errorMessage":"i is not a function","errorType":"TypeError","stackTrace":["n (/var/task/hello.js:1:220)","/var/task/hello.js:1:1019","Object.<anonymous> (/var/task/hello.js:1:1030)","Module._compile (module.js:652:30)","Object.Module._extensions..js (module.js:663:10)","Module.load (module.js:565:32)","tryModuleLoad (module.js:505:12)","Function.Module._load (module.js:497:3)","Module.require (module.js:596:17)"]}

模块似乎没有正确加载,但我找不到解决办法。

更新

我在Netlify找到了更多的日志:

代码语言:javascript
复制
2:27:00 PM: Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
2:27:00 PM:  @ /opt/build/repo/node_modules/formidable/lib/index.js
2:27:00 PM:  @ /opt/build/repo/node_modules/superagent/lib/node/index.js
2:27:00 PM:  @ /opt/build/repo/node_modules/node-mailjet/mailjet-client.js
2:27:00 PM:  @ /opt/build/repo/node_modules/node-mailjet/index.js
2:27:00 PM:  @ ./hello.js
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 23:38:39

错误的根本原因来自于formidable模块在superagent中的依赖,是由netlify函数中使用webpack的babel transpile造成的。

具体来说,问题可以在这里追踪。

代码语言:javascript
复制
if (global.GENTLY) require = GENTLY.hijack(require);

转移代码:

代码语言:javascript
复制
var require;if (global.GENTLY) require = GENTLY.hijack(!(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));

因此:

  • 构建过程中的Critical dependency警告
  • 响应Cannot find module.错误

解决方案:

在这个问题中,使用临时修复程序,我们将为global.GENTLY添加一个全局设置,以便webpack将值设置为false,而不注意行的其余部分。这一行被证实,它只是为了测试的目的。

创建一个文件来保存名为webpack.config.js的额外webpack配置设置,并将其放在项目的根中。

webpack.config.js

代码语言:javascript
复制
var webpack = require('webpack')

module.exports = {
  plugins: [
    new webpack.DefinePlugin({ "global.GENTLY": false })
  ]
}

现在,更改函数的build命令,将配置作为webpack的附加设置。

旧命令

代码语言:javascript
复制
netlify-lambda build <folder>

新命令

代码语言:javascript
复制
netlify-lambda build <folder> -c webpack.config.js

如果一切顺利,您就不应该在模块上出现警告或运行时故障。

注意:命令netlify-lambda是用于帮助捆绑用于netlify部署的函数的Netlify Lambda CLI工具。如果您没有使用CLI,那么您可以通过将插件添加到webpack配置中来解决这个问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51983191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档