javascript - 服务器代码中无法识别 Meteor 模板

标签 javascript email templates meteor server

我正在 Meteor 中构建一个应用程序,并且尝试从服务器端方法发送电子邮件。电子邮件的模板存在于我的 client/views 文件夹中。因此,当我尝试从服务器端代码发送电子邮件时,我收到错误“模板未定义”。这是我的代码:

/server/methods/sendemail.js

var html = Blaze.toHTMLWithData(Template.emailToCustomer, dataContext);
Meteor.call('sendEmail',
                 thisUser.emails[0].address,
                'mine@mine.org',
                'yours@gmail.com',
                 'email subject',
                  html
                );

我的电子邮件模板只是一个简单的 html 页面。请注意,如果此代码存在于 client/views/mytemplate.js 中,则它可以正常工作。但是,出于技术原因,我需要从服务器端代码发送电子邮件。

我尝试将 mytemplate.html 和 mytemplate.js 文件放入 app/both 和 app/server 文件夹中,但仍然收到模板未定义错误。

有人知道会发生什么吗?

谢谢!

最佳答案

您的模板是在客户端目录下定义的,因此它们在服务器上下文中不可用是正常的。

遗憾的是,目前无法使用普通 Meteor API 访问 Blaze 模板,即使您将模板移动到客户端和服务器都可用的共享目录也是如此。

但是你可以做的是使用 meteorhacks:ssr 定义仅适用于服务器的模板,您可以使用标准空格键语法来呈现这些模板。

您需要将服务器模板仅放在服务器 private 下目录并使用以下命令将它们编译到您的服务器代码中:

SSR.compileTemplate("emailToCustomer", Assets.getText("emailToCustomer.html"));

服务器模板不需要 <template>标签,您可以立即定义它们:

private/emailToCustomer.html

<p>Hello {{name}}</p>
<p>This is server-side rendering !</p>

在服务器代码中,编译模板后,您可以定义助手,就像在标准客户端 Blaze 模板中一样:

Template.emailToCustomer.helpers({
  name: function(){
    return this.firstName + " " + this.lastName;
  }
});

然后您可以使用以下方式渲染模板:

var html = SSR.render("emailToCustomer", {
  firstName: "John",
  lastName: "Doe"
});

关于javascript - 服务器代码中无法识别 Meteor 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32301867/

相关文章:

javascript - Node 命令不起作用

email - gitlab] 如何禁用用户确认邮件

c++模板使用来自基类的声明

javascript - 修改 react-boilerplate 以在 store 的单个键下嵌套注入(inject)的 reducer

javascript - 在 $rootScope 中存储用户数据——好还是坏?

javascript - Node.js 服务器在浏览器中超时,但 cURL 请求有效

email - A/B 测试电子邮件 - 添加另一个 utm- 变量

ios - 我可以通过电子邮件将 UIDocuments 作为附件发送吗?

c++ - 如何让模板推导其参数

templates - 在模板上迭代 golang 中的嵌套结构