Firebase 函数返回“响应不是有效的 JSON 对象。”

Abd*_*suf 7 javascript firebase vue.js google-cloud-functions

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

\n\n
const functions = require(\'firebase-functions\');\nconst admin = require("firebase-admin")\nconst nodemailer = require(\'nodemailer\');\n\nadmin.initializeApp()\n\n\n//google account credentials used to send email\nvar transporter = nodemailer.createTransport({\n    host: \'smtp.gmail.com\',\n    port: 465,\n    secure: true,\n    auth: {\n        user: \'xxxxx@gmail.com\',\n        pass: \'xxxxxxxxxx\'\n    }\n});\n\n\nexports.sendMail = functions.https.onRequest((req, res) => {\n    res.header("Access-Control-Allow-Origin", "*");\n    res.header("Access-Control-Allow-Headers", "Content-Type");\n    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");\n    const mailOptions = {\n        from: `\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2@gmail.com`,\n        to: req.body.email,\n        subject: \'contact form message\',\n        html: `<h1>Order Confirmation</h1>\n                            <p>\n                               <b>Email: </b>"hello<br>\n                            </p>`\n    };\n\n\n    return transporter.sendMail(mailOptions, (error, data) => {\n        console.log("here")\n        if (error) {\n            return res.send({"data": error.toString()});\n        }\n        data = JSON.stringify(data)\n        return res.send({"data": `Sent! ${data}`});\n    });\n\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这里删除了用户并传递值。它们在我的代码中具有正确的值。vue我用来调用该函数的方法如下所示:

\n\n
sendEmail(){\n        let sendMail = firebase.functions().httpsCallable(\'sendMail\');\n        sendMail(\n            {\n                email: \'xx@xx.xx.xx\'\n            }\n        ).then(\n            result => {\n                console.log(result.data)\n            }\n        )\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

调用此函数时,我在控制台中收到以下错误:

\n\n
Uncaught (in promise) Error: Response is not valid JSON object.\nat new e (index.cjs.js:58)\nat t.<anonymous> (index.cjs.js:543)\nat u (tslib.es6.js:100)\nat Object.next (tslib.es6.js:81)\nat s (tslib.es6.js:71)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Con*_*nel 15

以防万一这可以帮助任何人谷歌搜索这个问题,我得到了“响应不是有效的 JSON 对象”。错误,因为我没有在客户端中指定正确的区域,并且我的函数未托管在默认的美国区域中。我正在编写一个反应本机 firebase 应用程序,所以我必须更改:

const result = await firebase.app().functions().httpsCallable("nameGoesHere");
Run Code Online (Sandbox Code Playgroud)

到:

const result = await firebase.app().functions("europe-west1").httpsCallable("nameGoesHere");
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 5

您必须返回一个有效的JSON结果,如下所示:

return res.status(200).json({});

这里JSON is {}但它可能是例如类似的东西{"status": "success}