vue.js Firebase函数返回“响应不是有效的JSON对象”,

ghg1uchk  于 2022-11-17  发布在  Vue.js
关注(0)|答案(6)|浏览(185)

我正在尝试从vue应用程序调用的firebase函数发送电子邮件。我的firebase函数如下所示:

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: 'xxxxx@gmail.com',
        pass: 'xxxxxxxxxx'
    }
});

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");
    const mailOptions = {
        from: `•••••••••@gmail.com`,
        to: req.body.email,
        subject: 'contact form message',
        html: `<h1>Order Confirmation</h1>
                            <p>
                               <b>Email: </b>"hello<br>
                            </p>`
    };

    return transporter.sendMail(mailOptions, (error, data) => {
        console.log("here")
        if (error) {
            return res.send({"data": error.toString()});
        }
        data = JSON.stringify(data)
        return res.send({"data": `Sent! ${data}`});
    });

});

我在这里删除了用户和传递值。它们在我的代码中有正确的值。我用来调用这个函数的vue方法看起来像这样:

sendEmail(){
        let sendMail = firebase.functions().httpsCallable('sendMail');
        sendMail(
            {
                email: 'xx@xx.xx.xx'
            }
        ).then(
            result => {
                console.log(result.data)
            }
        )
    }

调用此函数时,控制台中出现以下错误:

Uncaught (in promise) Error: Response is not valid JSON object.
at new e (index.cjs.js:58)
at t.<anonymous> (index.cjs.js:543)
at u (tslib.es6.js:100)
at Object.next (tslib.es6.js:81)
at s (tslib.es6.js:71)

任何帮助都将不胜感激。谢谢

q3qa4bjr

q3qa4bjr1#

为了防止这对任何人在谷歌上搜索这个问题有帮助,我得到了“Response is not valid JSON object.”错误,因为我没有在客户端指定正确的区域,并且我的函数没有托管在默认的us区域。我正在编写一个react-native firebase应用程序,所以我不得不更改:

const result = await firebase.app().functions().httpsCallable("nameGoesHere");

收件人:

const result = await firebase.app().functions("europe-west1").httpsCallable("nameGoesHere");
cbwuti44

cbwuti442#

您必须返回一个有效的JSON结果,如下所示:
return res.status(200).json({});
这里是JSON is{},但也可以是{"status": "success}之类的.

ilmyapht

ilmyapht3#

问题可能出在行程常式。您使用的是functions().httpsCallable('your_name'),但函式的行程常式是onRequest。根据文件,应该有onCall函式行程常式。
类似于:exports.sendMail = functions.https.onCall((data) => { your_code_here });
文件-https://firebase.google.com/docs/functions/callable

juud5qan

juud5qan4#

我不能从代码中判断是否是这种情况,但当我在一个文件中导出一个函数,然后忘记将其包含在索引文件中时,这种情况总是发生。

ufj5ltwl

ufj5ltwl5#

我得到这个是因为我忘了连接模拟器:

import { connectFunctionsEmulator, getFunctions } from 'firebase/functions'

...
const functions = getFunctions(app)
connectFunctionsEmulator(functions, '127.0.0.1', 5001)

请注意,使用'localhost'会导致内部错误

uqjltbpv

uqjltbpv6#

我碰巧将函数名从name1更改为name2,而在调用name1的函数中,响应总是"Response is not valid JSON object."

  • 在Flutter我也经历过 *

相关问题