Firebase云函数调用Lemonsqueezy API时的参数与内部错误问题
Firebase Cloud Functions调用Lemonsqueezy API遇双重问题排查
我通过curl传递参数调用Firebase Cloud Functions的testActivateLicense函数时,反复触发内部服务器错误。排查过程中:
- 先修复了
logAndSendError函数未传入response参数导致的TypeError; - 再将
request.query改为request.body,解决了参数无法正确获取的问题。
但当前仍存在两个问题:调用Lemonsqueezy的License验证接口时,明明已正确获取参数,API却提示license_key和instance_name为必填项;同时logAndSendError函数依然存在未传入response的问题。以下是相关代码及日志:
原curl命令及报错
curl -X POST "https://testactivatelicense-a123bcdefg-uc.a.run.app/" -d license_key=3F9D04E3-F661-4F33-BB22-53FE83F111DC -d instance_name=test_1234 Internal Server Error%
初始函数代码
exports.testActivateLicense = onRequest(async (request, response) => { try { const licenseKey = request.query.license_key; const instanceName = request.query.instance_name; logger.log("Received request with licenseKey:", licenseKey, "and instanceName:", instanceName); const params = new URLSearchParams({license_key: licenseKey, instance_name: instanceName}).toString(); logger.log("Constructed query parameters:", params); response.status(response.status).send(response.data); } catch (error) { logAndSendError(error); } }); function logAndSendError(error, res) { logger.error("Error occurred:", error.message); if (error.response) { logger.error("Error response status:", error.response.status); logger.error("Error response data:", JSON.stringify(error.response.data, null, 2)); res.status(error.response.status).send(error.response.data); } else { res.status(500).send(error.message); } } function logAndSendError(error, res) { logger.error("Error occurred:", error.message); if (error.response) { logger.error("Error response status:", error.response.status); logger.error("Error response data:", JSON.stringify(error.response.data, null, 2)); res.status(error.response.status).send(error.response.data); } else { res.status(500).send(error.message); } }
GCP初始错误日志
TypeError: Cannot read properties of undefined (reading 'status') at logAndSendError (/workspace/index.js:76:9) ...
参数获取问题修复记录
日志显示参数为undefined,将request.query改为request.body后,参数可正常获取。
当前函数代码
exports.testActivateLicense = onRequest(async (request, response) => { try { const licenseKey = request.body.license_key; const instanceName = request.body.instance_name; logger.log("Received request with licenseKey:", licenseKey, "and instanceName:", instanceName); const params = new URLSearchParams({license_key: licenseKey, instance_name: instanceName}).toString(); logger.log("Constructed query parameters:", params); logger.log("Making request to Lemonsqueezy API with URL:", validateUrl); const res = await axios.post(activateUrl, params, { headers: { "Authorization": `Bearer ${testApiKey}`, "Accept": "application/json", "Content-Type": "application/vnd.api+json", }, }); logger.log("Received response from Lemonsqueezy API with status:", res.status); logger.log("Response data:", JSON.stringify(res.data, null, 2)); response.status(res.status).send(res.data); } catch (error) { logAndSendError(error); } });
当前错误日志
Received request with licenseKey: ABCDEF-GHIJ-KLMN-OPQR-STUVWXYZ and instanceName: test_1234 Constructed query parameters: license_key=ABCDEF-GHIJ-KLMN-OPQR-STUVWXYZ&instance_name=test_1234 Making request to Lemonsqueezy API with URL: https://api.lemonsqueezy.com/v1/licenses/validate Error: Error response data: { "message": "The license key field is required. (and 1 more error)", "errors": { "license_key": [ "The license key field is required." ], "instance_name": [ "The instance name field is required." ] } } ... TypeError: Cannot read properties of undefined (reading 'status') ...
内容的提问来源于stack exchange,提问作者N.K.
相关产品推荐
相关产品推荐

