我的函数的Firebase部署失败,出现以下错误:
“函数在载入使用者程式码时失败。这可能是因为使用者程式码中有错误。”
下面是函数代码:
const postmark = require("postmark");
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp()
exports.sendPostmarkEmailFunction = functions.firestore.
document('/postmarklogs/{documentId}').
onCreate((snapShot, context) => {
var serverToken = "_my_client_key_";
var client = new postmark.ServerClient(serverToken);
try {
client.sendEmail({
"From": "_my_depatch_address_",
"To": "_my_receipt_address_",
"Subject": snapShot.data().subject,
"HtmlBody": snapShot.data().message
});
return true;
} catch (error) {
console.log("Error : " + error.ErrorCode + " : " + error.Message);
return false;
}
});
这段代码在Firebase模拟器中运行得很好。据我所知,部署问题是由const postmark = require("postmark");
行触发的。如果我注解掉这一行,函数就会部署--但当然它不会工作!
如有建议,将不胜感激。
1条答案
按热度按时间mznpcxlj1#
邮戳需要安装在项目的“functions”文件夹中。我已将其安装到项目的主体中,因此指导部署的生成阶段的“functions/package.json”文件中缺少邮戳。由
firebase init functions
创建的“functions”文件夹就像项目中的项目,需要按此处理。我从部署“构建”日志中发现了这个问题。一旦将Postmark安装在“functions”文件夹中,我的sendPostmarkEmailFunction函数就可以完美地工作了。
顺便说一句,除非您已经知道这一点,否则Postmark API令牌确实需要安全地保存在Firebase environment variable存储中。此外,虽然您可能很想使用https.onRequest触发器而不是这里使用的onCreate(),但您可能希望知道,当与Postmark一起使用时,这可能会使您陷入无尽的CORS问题。