gpt4 book ai didi

javascript - Firebase 可调用函数返回 null 结果

转载 作者:行者123 更新时间:2023-12-01 00:45:18 25 4
gpt4 key购买 nike

下面的谷歌云函数返回空结果。

相同的代码可以很好地处理 onRequest 并按预期返回数据。我想使用可调用函数以便轻松地将参数发送到该函数。有人知道这里出了什么问题吗?

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

exports.getUserData = functions.https.onCall((data, context) => {

const connectionName =
process.env.INSTANCE_CONNECTION_NAME || 'instance';
const dbUser = process.env.SQL_USER || 'root';
const dbPassword = process.env.SQL_PASSWORD || 'password';
const dbName = process.env.SQL_NAME || 'someDb';

const mysqlConfig = {
connectionLimit: 1,
user: dbUser,
password: dbPassword,
database: dbName,
};
if (process.env.NODE_ENV === 'production') {
mysqlConfig.socketPath = `/cloudsql/${connectionName}`;
}

let mysqlPool;

if (!mysqlPool) {
mysqlPool = mysql.createPool(mysqlConfig);
}

mysqlPool.query('SELECT * from table where id = 1', (err, results) => {

if (err) {
console.error(err);
} else {
data.send(JSON.stringify(results));
}

});
})

最佳答案

正如您将在 Firebase 官方视频系列 ( https://firebase.google.com/docs/functions/video-series/ ) 中有关“JavaScript Promises”的三个视频中看到的,您必须在 Cloud Function 中返回 Promise 或值,以向平台表明它已完成。

您使用的mysqljs/mysql库不会返回Promises,因此一种方法是使用promise-mysql ,它“是 mysqljs/mysql 的包装器,用 Bluebird Promise 包装函数调用”。

我还没有尝试过,但以下几行应该可以解决问题:

const functions = require('firebase-functions');
const mysql = require('mysql');
const mysqlPromise =require('promise-mysql');

exports.getUserData = functions.https.onCall((data, context) => {

//.....

const connectionOptions = ...;

return mysqlPromise.createPool(connectionOptions) //you must return the Promises chain
.then(pool => {
return pool.query('SELECT * from table where id = 1')
})
.then(results => {
return(results: JSON.stringify(results));
//send back the response with return() not with data.send(), see the doc
})
.catch(error => {
//See the Callable Functions doc: https://firebase.google.com/docs/functions/callable#handle_errors_on_the_client
});

});

关于javascript - Firebase 可调用函数返回 null 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com