NodeJS 为什么我的Firebase/Postmark电子邮件发送功能无法部署?

bogh5gae  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(171)

我的函数的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");行触发的。如果我注解掉这一行,函数就会部署--但当然它不会工作!
如有建议,将不胜感激。

mznpcxlj

mznpcxlj1#

邮戳需要安装在项目的“functions”文件夹中。我已将其安装到项目的主体中,因此指导部署的生成阶段的“functions/package.json”文件中缺少邮戳。由firebase init functions创建的“functions”文件夹就像项目中的项目,需要按此处理。
我从部署“构建”日志中发现了这个问题。一旦将Postmark安装在“functions”文件夹中,我的sendPostmarkEmailFunction函数就可以完美地工作了。
顺便说一句,除非您已经知道这一点,否则Postmark API令牌确实需要安全地保存在Firebase environment variable存储中。此外,虽然您可能很想使用https.onRequest触发器而不是这里使用的onCreate(),但您可能希望知道,当与Postmark一起使用时,这可能会使您陷入无尽的CORS问题。

相关问题