2013-10-11 49 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 
    }); 
} 
相關問題