繁体   English   中英

服务器代码无法识别流星模板

[英]Meteor templates not recognized in server code

我正在Meteor中构建应用程序,并且试图通过服务器端方法发送电子邮件。 电子邮件的模板存在于我的客户/视图文件夹中。 因此,当我尝试从服务器端代码发送电子邮件时,出现错误“模板未定义”。 这是我的代码:

/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"
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM