我是Meteor的初学者,我想在我的应用程序中使用iron:router发送一个动态生成页面的邀请链接。
Meteor.methods({
'sendEmail': function(to) {
this.unblock();
SSR.compileTemplate( 'emailText', Assets.getText( 'html-email.html' ) );
Template.emailText.helpers({
link: function () {
return Router.current().route.path(this);;
}
});
Email.send({
to:to,
from: 'no-reply@whatever.xyz',
subject:'xyz wants to invite you ',
html: SSR.render('emailText')
});
}})
}
问题是我没有在我的html-email.html
中获得该网站的网址。我有
<a href="{{link}}">Link to invitation</a>
我做错了什么?
答案 0 :(得分:0)
您的方法是服务器方法(SSR)。 Router.current()
是一个客户端方法,不能返回任何服务器端。解决方案是将url作为参数传递。以这种方式调用您的方法:
Meteor.call( 'sendEmail', email, url, ... )
然后你的方法将是:
'sendEmail': function( to, url ) {...
答案 1 :(得分:0)
看看你的代码,我会说你混淆了服务器端方法和客户端模板助手。
你想要达到什么目的?想要将您网站中用户所在的当前路由包含在邮件中吗?然后,在您的sendEmail
方法中将网址作为额外参数发送,例如fabien建议。
如果链接是您用作某个目标网页链接的静态路径,我建议从settings.json获取该路径。
无论哪种方式,您的问题都是呈现包含一些链接的电子邮件。您可以将对象作为第二个参数传递给SSR.render
。
以下是解决这个问题的方法:
Meteor.methods({
'sendEmail': function(to) {
this.unblock();
var linkInMail = 'htpp://some_url/etc?etc'; // Fill this value, see my remark above
var templateName = 'emailText';
SSR.compileTemplate(templateName, Assets.getText( 'html-email.html' ) );
var renderedContent = SSR.render(templateName, {link: linkInMail}); // This your missing part
Email.send({
to:to,
from: 'no-reply@whatever.xyz',
subject:'xyz wants to invite you ',
html: renderedContent
});
}})
}