首页 > 解决方案 > 将数据传递给 emailTemplate ejs 文件的问题

问题描述

我正在尝试将令牌传递给作为ejs文件的电子邮件模板,即emailTemplate.ejs ,但它没有被呈现为数据,而是仅作为测试呈现,即token变量呈现为token文本。这是代码:


sendgridMail.setApiKey(sendGridApi)

const email = async (req, res, next) => {
  const user = await User.findOne({ email: req.body.email })
  let token
  if (user) {
    token = user.tokens.slice(-1)[0].token
    console.log('token before sending email ', token)
  }
  const filePath = path.join(__dirname, '/../../views/emailTemplate.ejs')
  // TO PASS TOKEN TO EMAIL TEMPLATE EJS FILE
  ejs.renderFile(filePath, { token: token }, (err, data) => {
    if (err) {
      console.log('Error in renderFile ', err)
    } else {
      // console.log('ejs data ', data)
      const message = {
        to: req.body.email,
        from: 'services@codeuino.com',
        subject: `Welcome to Donut ${req.body.name.firstName}`,
        html: data
      }
      sendgridMail.send(message).then(
        () => {
          console.log('sending email')
          next()
        },
        (error) => {
          res.status(HttpStatus.BAD_REQUEST).send({
            error: process.env.SENDGRID_API_KEY
              ? error.response.body
              : 'Setup SENDGRID_API_KEY environment variable'
          })
        }
      )
    }
  })
}

这是电子邮件模板 EJS 试图呈现 URL

 <p>http://localhost:5000/user/activate/ <=% token %></p> // TOKEN IS NOT GETTING RENDERED HERE

Wreas alraedy 配置为ejsveiw 引擎server.js

app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')

标签: node.jsexpresswebejs

解决方案


我认为这只是一个ejs语法错误。将参数传递给模板应该如下所示。

<%= token %>


推荐阅读