服务器代码无法识别流星模板
Meteor templates not recognized in server code
我正在构建流星应用程序,我正试图从服务器端方法发送电子邮件。电子邮件的模板存在于我的客户端/视图文件夹中。因此,当我尝试从服务器端代码发送电子邮件时,我得到错误"模板未定义"。下面是我的代码:
/服务器/方法/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
来定义服务器模板,你可以使用标准的空格语法来渲染。
你需要把你的服务器模板放在server only 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"
});
相关文章:
- 如何识别我的网站中的慢速设备
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 如何使用铁流星与流星的默认路线
- 在流星上使用微信js-sdk时出现拒绝权限错误
- AngularJS指令只识别双向绑定类型
- 流星中DOM的繁殖
- php脚本中无法识别ajax传递的值
- 识别没有ID或特定属性的对象
- JavaScript无法识别图像
- 保存串行端口列表与流星
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- 流路由器流星的历史
- 动态路径用于流星/铁路由器
- 识别由不同数量的项组成的json对象
- 无法识别从php创建的Js函数
- 无法识别流星自定义 HTML 标记
- '调试'不被识别为流星的内部命令
- 流星:识别客户端并将数据发送到这个特定的客户端——在其他客户端上创建块元素
- 服务器代码无法识别流星模板
- 为什么我的流星应用不能识别我的功能?