2013-10-11 115 views
1

我想渲染一个sailsjs控制器/操作中的特定视图,它应该作为电子邮件发送出去。如何呈现视图到字符串?

我有以下示例动作:

function registerAction(req, res) { 
    // handle user registration 


    // email user 
    sendEmail({ 
     to: newUser.email, 
     subject: "Welcome", 
     text: /* VIEW RENDER HERE */ 
    }); 

    // render view to the user 
    return res.view({ 
    user: newUser 
    }); 
} 

我怎样才能使一个视图模板的工具sailsjs提供,这样我就不需要硬编码的电子邮件正文或使用其他库?

在此先感谢!

回答

2

快递'res.render()仍然是accessible在您的res对象。

function registerAction(req, res) { 
    // handle user registration 

    res.render('/path/to/view', function (err, html) { 
    // email user 
    sendEmail({ 
     to: newUser.email, 
     subject: "Welcome", 
     text: html 
    }); 
    } 

    // render view to the user 
    return res.view({ 
    user: newUser 
    }); 
} 
+0

当我用这个,它只有在你通过视图,而不是路径名的作品。 我的html也没有在回调中呈现。我的ejs模板里面的变量没有被填充,它们仍然显示为{{person.name}}。有什么特别的事情需要完成吗? – Brandon

+0

@Brandon我可能错误地认为'res.render()'接受一个路径而不是“视图名称”。尽管如此,它并没有太大改变。然而,你得到的“视图名称”取决于你的应用程序的逻辑。至于渲染“未填充的模板”,您需要在服务器上编译您的模板并提供服务,或者提供服务并使用客户端库(例如AngularJS,ReactJS等)来解释模板,或者同时使用两者。 – crzrcn

+0

Brandon要传入变量,第二个参数应该是您的数据,例如res.render('path/to/view',{name:person_name},function(err,html)...等 –

0

为了提高一点就crzrcn的答案,以确保

function registerAction(req, res) { 
    // handle user registration 

    // don't include the .ejs of the end of your view, this assumes a file in path/to/view.ejs 
    res.render('path/to/view', function (err, html) { 
    // email user 
    sendEmail({ 
     to: newUser.email, 
     subject: "Welcome", 
     html: html // rather than text in crzrcn's answer 
    }); 
    } 

    // render view to the user 
    return res.view({ 
    user: newUser 
    }); 
} 
相关问题