首页 > 解决方案 > Firebase - 云函数返回未定义

问题描述

我正在尝试利用 nodemailer 和 firebase 云功能构建一个邮件功能:

const functions = require('firebase-functions');
const nodemailer = require('nodemailer');

const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport("smtps://gmailEmail:gmailPassword@smtp.gmail.com");

const test = 'some.email@gmail.com'

const APP_NAME = 'Dati fatturazione elettronica';

exports.sendDatas = functions.database.ref('/datiFatt/{pushId}').onCreate((data) => {
  console.log(data);

  const name = data.name;
  const pec = data.pec
  const id = data.id;

  return sendEmail(name, pec, id);
});

function sendEmail(name, pec, id) {
  const mailOptions = {
    from: `${gmailEmail}`,
    to: test
  };

  mailOptions.subject = `Data from ${name}!`;
  mailOptions.html = `${name} \n ${pec} \n ${id} `;

  return mailTransport.sendMail(mailOptions)
    .then(() => {
      return console.log('New email sent to:', test);
    });
}

但不知何故,这个函数在其所有字段中返回“未定义”。可能我以错误的方式访问数据。

标签: firebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


您的sendEmail功能可能是错误的。你正在尝试return console.log

尝试调整为以下格式;

function sendEmail(name, pec, id) {
  const mailOptions = {
    from: `${gmailEmail}`,
    to: test
  };

  mailOptions.subject = `Data from ${name}!`;
  mailOptions.html = `${name} \n ${pec} \n ${id} `;

  return mailTransport.sendMail(mailOptions)
    .then(() => {
      console.log('New email sent to:', test);

      return;
    });
}

推荐阅读