Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取从函数调用发送到firebase云函数的数据_Javascript_Firebase_Vue.js_Google Cloud Functions - Fatal编程技术网

Javascript 无法获取从函数调用发送到firebase云函数的数据

Javascript 无法获取从函数调用发送到firebase云函数的数据,javascript,firebase,vue.js,google-cloud-functions,Javascript,Firebase,Vue.js,Google Cloud Functions,我有一个名为sendMail的firebase函数,用于发送电子邮件。我正在尝试将收件人的电子邮件地址和另一个参数传递给函数。在我的vue应用程序中,我按如下方式调用该函数: sendEmail(){ console.log(this.email) let sendMail = firebase.functions().httpsCallable('sendMail'); sendMail(

我有一个名为sendMail的firebase函数,用于发送电子邮件。我正在尝试将收件人的电子邮件地址和另一个参数传递给函数。在我的vue应用程序中,我按如下方式调用该函数:

sendEmail(){
            console.log(this.email)
            let sendMail = firebase.functions().httpsCallable('sendMail');
            sendMail(
                {
                    "email": this.email,
                    "superu": this.superu
                }
            ).then(
                result => {
                    console.log(result)
                }
            )
        }
我的函数index.js如下所示:

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

admin.initializeApp()


//google account credentials used to send email
var transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: '*****@****.com',
        pass: '***********'
    }
});


exports.sendMail = functions.https.onRequest((req, res) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Content-Type");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");        

    console.log(req.body['data']);
    const mailOptions = {
        from: `•••••••••@gmail.com`,
        to: req.body['data'].email,
        subject: 'contact form message',
        html: `<h2 style="color: teal">Order Confirmation</h2>
                            <a href="https://track-acquintances.firebaseapp.com/signup/${req.body.superu}">
                               <b> Register </b>"<br>
                            </a>`
    };


    return transporter.sendMail(mailOptions, (error, data) => {
        if (error) {
            return res.status(200).json({data: error.message});
        }
        data = JSON.stringify(data)
        return res.status(200).json({data: data});
    });

});

问题是我无法访问传递的电子邮件数据,该功能失败。我将req.body['data']记录到函数日志中,并看到{email:'xxx@xx.xxx.x“,superu:true}。但是我尝试了req.body['data'].email和req.body['data']['email']两种方法,但都不起作用。在我的浏览器控制台中,我得到{data:No recipients defined}。任何帮助都将不胜感激。谢谢

您混淆了两种类型的云功能:

您的云函数定义为,这意味着您可以通过在浏览器中访问其URL、调用fetch或使用XMLHTTPRequest来调用它

您的客户机代码尝试调用一个不同类型的所谓的。虽然也可以通过HTTPS直接调用可调用的云函数,但它们有一个特定的有线协议供调用

由于这两种类型的函数不匹配,因此客户端代码以不同于服务器处理的格式传递参数

您需要调用HTTPS函数,或者将云函数转换为可调用。后者看起来像:

exports.sendMail = functions.https.onCall((data, context) => {
  const email = data.email;
  const superu = data.superu;

  ...
});

您混淆了两种类型的云函数:

您的云函数定义为,这意味着您可以通过在浏览器中访问其URL、调用fetch或使用XMLHTTPRequest来调用它

您的客户机代码尝试调用一个不同类型的所谓的。虽然也可以通过HTTPS直接调用可调用的云函数,但它们有一个特定的有线协议供调用

由于这两种类型的函数不匹配,因此客户端代码以不同于服务器处理的格式传递参数

您需要调用HTTPS函数,或者将云函数转换为可调用。后者看起来像:

exports.sendMail = functions.https.onCall((data, context) => {
  const email = data.email;
  const superu = data.superu;

  ...
});

我将如何访问设置标题?我将如何访问设置标题?