来自 nodemailer 模板电子邮件的电子邮件中的额外孤立字符

Extra orphaned character in email from nodemailer template email

我正在使用 "nodemailer": "^6.5.0" 通过 HTML 模板发送电子邮件。一切正常,除了当我映射一个数组字段时,我在每个项目后得到一个额外的 , 字符,我无法弄清楚它来自哪里。

这是直接从 Gmail 中的 Chrome 检查器复制的呈现电子邮件中的 HTML 元素:

<div>
  <p><b>Brad Stewart 11-03-21 15:26:</b> Another note...</p>
  ,
  <p><b>Brad Stewart 11-03-21 15:44:</b> And another note ...</p>
  ,
  <p><b>Brad Stewart 14-03-21 13:07:</b> test again</p>
  ,
  <p><b>Brad Stewart 14-03-21 13:15:</b> And testing again...</p>
</div>

这是 HTML 模板的部分

`<p>
  <b>Notes:</b>
  <div>
    ${task.notes
        ? task.notes.map(
            (note) =>
              `<p><b>- ${note.created_by_name} ${moment(note.date)
                .tz('Australia/Perth')
                .format('DD-MM-YY HH:mm')}:</b> ${note.note}</p>`
          )
        : '-'
    }
  </div>
</p>`

感谢您提供删除这些孤立字符的任何帮助或想法。

通过调用Array.prototype.toString since it's inside template literals将数组转换为字符串。 toString 方法 returns 数组元素以逗号连接为字符串。

来自docs,

JavaScript calls the toString method automatically when an array is to be represented as a text value or when an array is referred to in a string concatenation.

const arr = ['Note 1', 'Note 2', 'Note 3']
console.log(`Notes: ${arr}`)
console.log(arr.toString())

您可以使用 Array.prototype.join 将其显式转换为字符串。

task.notes
  .map(
    (note) =>
      `<p><b>- ${note.created_by_name} ${moment(note.date)
        .tz('Australia/Perth')
        .format('DD-MM-YY HH:mm')}:</b> ${note.note}</p>`
  )
  .join('')