Strapi Beta 带有用于电子邮件的自定义 Sendgrid 控制器代码

2024-01-21

Strapi beta 的结构改变了插件的架构方式,删除了 /plugins 目录,插件现在保存在 /node_modules 目录中。我正在尝试编写一些自定义代码以在下订单后触发确认电子邮件。在以前版本的 Strapi 中,电子邮件插件目录位于此处:

/server/plugins/email/controllers

在此目录中,编写了以下代码,该代码在 SEND 控制器的 alpha 版本中运行:

我们对此进行评论:// await.strapi.plugins.email.services.send(options, config);

然后这段代码被用在曾经存在的电子邮件控制器的 module.exports 内的 SEND 控制器中......

let options = ctx.request.body;

   try {
   // send email to user
   await strapi.plugins['email'].services.email.send({
      to: options.to,
      from: '[email protected] /cdn-cgi/l/email-protection',
      subject: options.subject,
      text: options.text,
      html: options.html
   })
} catch (err) {
   return ctx.badRequest(null, err);
}

   // Send 200 'ok;
   ctx.send({});

好吧,这就是服务器端的 Strapi Send 控制器……现在在客户端,订单承诺返回后,我们会触发另一个确认电子邮件的承诺,该电子邮件会点击 Strapi API:

await.strapi.request('POST', '/email', { 
   data: {
      to: confirmationEmailAdress,
      subject: "Order Confirmation',
      text: 'Your order has been processed',
      html: '<b>Expect your stuff to arrive broken. Thanks.</b>'
   }
});

简而言之,现在的问题是 Strapi 的架构发生了变化,不确定将我的服务器代码放在上面的位置,以及调用以触发电子邮件的 API url。我在 Strapi 中使用 API 密钥、权限设置了 SendGrid,一切都很好,只是问题是,既然 Beta 架构已从 alpha 更改,那么放置此代码的正确位置在哪里?

* 更新代码 *

根据吉姆的建议,我现在在 /extensions 文件夹中创建了一个电子邮件控制器,如下所示:

/server/extensions/email/controllers/Email.js

Email.js

'use strict';

module.exports = {

  send: async (ctx) => {
    let options = ctx.request.body;

    try {
      //Send email to the user
      await strapi.plugins['email'].services.email.send({
        to: options.to,
        from: '[email protected] /cdn-cgi/l/email-protection',
        subject: options.subject,
        text: options.text,
        html: options.html
      });
    } catch (err) {
      return ctx.badRequest(null, err);
    }
  }
}

现在,在客户端中,我使用 React 的 Promise 来调用我们的电子邮件扩展,如下所示:

await strapi.request('POST', '/email', {
        data: {
          to: confirmationEmailAddress,
          subject: `Order Confirmation - South of Sleep ${new Date(Date.now())}`,
          text: 'Your order has been processed',
          html: '<bold>Except your stuff to be broken upon arriving</bold>'
        }
      });

有用!该电子邮件是从 Strapi 发送的,我看到控制器中的信息是电子邮件的一部分。问题?

客户端中的 Promise 是 try/catch 的一部分,在电子邮件被触发后,它会返回 404,因为它找不到/email作为路线。所以,我不明白为什么它正在工作并找到电子邮件的扩展控制器,触发电子邮件但返回 404 路由。

我从客户端错误地调用扩展控制器。


现在您必须遵循定制文档。 这是文档https://strapi.io/documentation/3.0.0-beta.x/concepts/customization.html#plugin-extensions https://strapi.io/documentation/3.0.0-beta.x/concepts/customization.html#plugin-extensions

  • 您必须按照要更新的文件路径创建文件。
  • 然后您只复制您需要的功能。
  • 最后添加您的电子邮件服务电话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Strapi Beta 带有用于电子邮件的自定义 Sendgrid 控制器代码 的相关文章

随机推荐

  • 使用特殊情况解析器包装 GraphQL 标量类型

    我有一个特殊的 GraphQL 标量类型表示日期时间的库 https www npmjs com package graphql iso date对象 但是 我有一个情况 从 MySQL 返回值 0000 00 00 00 00 00 这表
  • 无法让 HTTP PUT 请求在 ASP.NET Core 中工作

    我正在尝试更新中的条目game桌子 但是 我在 ASP NET 中的 PUT 请求似乎从未触发 我不明白为什么 这是 ASP NET 中的控制器 Route game update GameID HttpPut public IAction
  • 在 Qt5 中使用文本元素的彩色点

    我写了这个示例代码 import QtQuick 2 0 Rectangle width 360 height 360 Text text qsTr Hello World anchors centerIn parent font pixe
  • 如何省略 128C 条形码中的前导 0?

    例如 如果我将 12345 放入 文本 条形码的属性中 则输出为 012345 这个 0 就是问题所在 我怎样才能删除这个 我正在使用 Delphi 2010 和 FastReport 4 9 72 Code 128C 条形码的位数必须为偶
  • 启动时将程序放入系统托盘

    我遵循了常见链接的技巧来减少系统托盘中的应用程序 http www developer com net csharp article php 3336751 http www developer com net csharp article
  • 将 Junit XML 报告转换为 HTML 形式 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用soapui免费版本来生成
  • C# 中的流长度有限制吗?

    我需要以这种方式读取流 using HttpWebResponse response HttpWebResponse request getResponse using Stream answer response getResponseS
  • Pandas 根据函数返回单独的 DataFrame 值

    我有两个数据框 df1是地点的位置和df2是车站的位置 我试图找到一种更有效的方法来应用距离函数来查找哪些车站在一定范围内并返回车站的名称 如果距离函数是纬度差 1这是我的预期结果 df1 Lat Long 0 30 31 1 37 48
  • 如何使用 *ngIf 检查 Angular 2 模板中的空对象

    我想检查我的对象是否为空 不渲染我的元素 这是我的代码 div class comeBack up a previous info title a div 但我的代码是错误的 最好的方法是什么 这应该做你想要的 div class come
  • .NET Gridview 主题示例

    我正在寻找 net gridView 主题 css 文件 的示例 以获得网格的想法 我的网格必须具有双页式外观 底部和顶部 并且应该支持排序 通过单击标题 和移动鼠标时突出显示行 我在网上找到的唯一一款是玻璃黑 http weblogs a
  • 在SBT上使用maven插件

    有没有办法在 SBT 上使用 Maven 插件 不 sbt 确实以有限的方式支持 pom xml 通过sbt pom 阅读器 https github com sbt sbt pom reader 但我们不支持使用maven插件 它有自己的
  • 无法读取黑底白字 Data Matrix 条形码

    iOS 8 中添加了 Data Matrix 条形码支持 如果 Data Matrix 条形码是黑底白字 深色浅色 我可以使用它来读取它们 但是 它永远不会读取黑底白字 浅色深色 条形码 读起来很好 无法阅读此内容 根据 Data Matr
  • 如何格式化 Pandas 数据框的 IPython html 显示?

    如何格式化 Pandas 数据帧的 IPython html 显示 以便 数字右对齐 数字以逗号作为千位分隔符 大浮点数没有小数位 我明白那个numpy有设施set printoptions我可以在哪里做 int frmt lambda x
  • 删除 Jupyter Notebook 的每个单元格行上的播放按钮显示

    我在使用 Jupyterbook 时不小心按下了一些按钮 现在 每个单元格都会显示一个 运行此单元格 播放按钮 图标 这在视觉上会分散注意力 我找不到切换开关 命令来将其关闭 我可以把它关掉吗 您很可能已经升级了notebook打包到版本5
  • 如何获取当前小部件的偏移量

    每当用户按下屏幕时 我就尝试绘制一个小部件 目前 我通过存储小部件列表来做到这一点 当 ontapup 在手势上触发时 我将添加到小部件列表中 Widget build BuildContext context Widget draw ne
  • 路由模型绑定和软删除 - Laravel 4

    当使用软删除和路由到模型绑定时 会出现一种情况 如果注入的模型已被 软删除 则您无法查看该模型 e g 我有一个工作模型 如果我 垃圾 其中一个模型 然后打开垃圾箱并尝试查看作业模型 我会收到 404 未找到资源 我通过使用 Route b
  • 如何使用另一个板条箱中定义的宏?

    我看过一些使用以下命令创建 Python 模块的教程cpythoncrate 但构建时仍然出现错误 extern crate cpython use cpython PyObject PyResult Python PyTuple PyDi
  • F# 中可以进行函数重载吗?

    就像是 let f x log x 然后我可以将 f 应用于矩阵 向量或浮点数 我想这是不可能的 因为 F 是严格静态类型的 还有其他模式可以解决这个问题吗 Thanks 看我对这个问题的回答 具有泛型参数类型的函数 https stack
  • Node.js Stream API 泄​​漏

    在使用节点流时 我注意到几乎每个教程都会教授以下内容 Get Google s home page require http get http www google com function response The callback pr
  • Strapi Beta 带有用于电子邮件的自定义 Sendgrid 控制器代码

    Strapi beta 的结构改变了插件的架构方式 删除了 plugins 目录 插件现在保存在 node modules 目录中 我正在尝试编写一些自定义代码以在下订单后触发确认电子邮件 在以前版本的 Strapi 中 电子邮件插件目录位