[英]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.