- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从示例函数复制了电子邮件确认云函数并将其部署到我的项目中,它可以工作,并且该函数显示在我的 Firebase 控制台中。
但是,当我根据需要自定义代码然后部署到 firebase 后,该函数就从我的 firebase 函数中消失了。
原代码为:
'use strict';
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
// Configure the email transport using the default SMTP transport and a GMail account.
// For other types of transports such as Sendgrid see https://nodemailer.com/transports/
// TODO: Configure the `gmail.email` and `gmail.password` Google Cloud environment variables.
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: gmailEmail,
pass: gmailPassword,
},
});
// Sends an email confirmation when a user changes his mailing list subscription.
exports.sendEmailConfirmation = functions.database.ref('/users/{uid}').onWrite((event) => {
const snapshot = event.data;
const val = snapshot.val();
if (!snapshot.changed('subscribedToMailingList')) {
return null;
}
const mailOptions = {
from: '"Spammy Corp." <noreply@firebase.com>',
to: val.email,
};
const subscribed = val.subscribedToMailingList;
// Building Email message.
mailOptions.subject = subscribed ? 'Thanks and Welcome!' : 'Sad to see you go :`(';
mailOptions.text = subscribed ? 'Thanks you for subscribing to our newsletter. You will receive our next weekly newsletter.' : 'I hereby confirm that I will stop sending you the newsletter.';
return mailTransport.sendMail(mailOptions)
.then(() => console.log(`New ${subscribed ? '' : 'un'}subscription confirmation email sent to:`, val.email))
.catch((error) => console.error('There was an error while sending the email:', error));
});
更新后的代码是:
'use strict';
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
// Configure the email transport using the default SMTP transport and a GMail account.
// For other types of transports such as Sendgrid see https://nodemailer.com/transports/
// TODO: Configure the `gmail.email` and `gmail.password` Google Cloud environment variables.
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: gmailEmail,
pass: gmailPassword,
},
});
// Sends an email confirmation when a user changes his mailing list subscription.
exports.sendEmailConfirmation = (req, res) => {
if (req.body.subject === undefined || req.body.recipient === undefined) {
// This is an error case, as "message" is required.
//res.status(400).send('subject/body/recipient is missing!');
return false
} else {
const mailSubject = req.body.subject;
const mailHtmlBody = req.body.htmlBody;
const mailRecipient = req.body.recipient;
const mailOptions = {
from: '"Food Ninja." <foodninjaapp@gmail.com>',
to: mailRecipient,
subject: mailSubject,
html: mailHtmlBody
};
//res.status(200).send('Success: ' + mailSubject + ' to ' + mailRecipient);
return mailTransport.sendMail(mailOptions)
// .then(() => console.log(`${mailSubject}subscription confirmation email sent to: `, mailRecipient))
// .catch((error) => console.error('There was an error while sending the email:', error));
}
};
到目前为止,我没有发现代码有任何问题,请指教。
已编辑
我如何部署它:
firebase deploy
以下是 Cmder 对新代码部署的响应:
=== Deploying to 'food-ninja-mobile'...
i deploying database, functions, hosting
Running command: npm --prefix "$RESOURCE_DIR" run lint
> functions@ lint C:\Users\jerry.ho\Documents\ADA\Proj
ects\foodNinjaCloudFunction\email-confirmation\functio
ns
> eslint .
+ functions: Finished running predeploy script.
i database: checking rules syntax...
+ database: rules syntax for database food-ninja-mobi
le is valid
i functions: ensuring necessary APIs are enabled...
+ functions: all necessary APIs are enabled
i functions: preparing functions directory for upload
ing...
i hosting: preparing public directory for upload...
+ hosting: 4 files uploaded successfully
i database: releasing rules...
+ database: rules for database food-ninja-mobile rele
ased successfully
i functions: deleting function sendEmailConfirmation.
..
+ functions[sendEmailConfirmation]: Successful delete
operation.
+ Deploy complete!
Project Console: https://console.firebase.google.com/p
roject/food-ninja-mobile/overview
Hosting URL: https://food-ninja-mobile.firebaseapp.com
以下是原始代码部署的响应:
=== Deploying to 'food-ninja-mobile'...
i deploying database, functions, hosting
Running command: npm --prefix "$RESOURCE_DIR" run lint
> functions@ lint C:\...\---local path---
> eslint .
+ functions: Finished running predeploy script.
i database: checking rules syntax...
+ database: rules syntax for database food-ninja-mobile is valid
i functions: ensuring necessary APIs are enabled...
+ functions: all necessary APIs are enabled
i functions: preparing functions directory for uploading...
i functions: packaged functions (52.54 KB) for uploading
+ functions: functions folder uploaded successfully
i hosting: preparing public directory for upload...
+ hosting: 4 files uploaded successfully
i database: releasing rules...
+ database: rules for database food-ninja-mobile released successfully
i functions: creating function sendEmailConfirmation...
+ functions[sendEmailConfirmation]: Successful create operation.
+ Deploy complete!
Project Console: https://console.firebase.google.com/project/food-ninja-mobile/overview
Hosting URL: https://food-ninja-mobile.firebaseapp.com
最佳答案
@Jerry 该函数不起作用,因为您已用自己的函数替换了该函数调用
functions.database.ref('/users/{uid}').onWrite
这一行是您的函数的触发器,所以自然地,该函数现在无法运行。
部署云功能时,请务必查看生成的日志。例如:如果您现在部署旧代码,日志将显示“sendEmailConfirmation 函数已创建”
如果您更新同一函数的内容,它将记录“sendEmailConfirmation 函数已更新”
如果您删除或删除该功能,它将记录,“sendEmailConfirmation 功能已删除”
希望这有帮助。
收到评论后进行编辑:
exports.sendEmailConfirmation = functions.database.ref('/users/{uid}').onWrite((event) => {
const snapshot = event.data;
const val = snapshot.val();
if (!snapshot.changed('subscribedToMailingList')) {
return null;
}
//instead of getting from the request, have the mail variables either in a firebase node or for now just hard code it. for email, get it from the variable val
const mailSubject = "This is my mail subject";
const mailHtmlBody ="this is a awesome mail";
const mailRecipient = val.email;
const mailOptions = {
from: '"Food Ninja." <foodninjaapp@gmail.com>',
to: mailRecipient,
subject: mailSubject,
html: mailHtmlBody
};
return mailTransport.sendMail(mailOptions)
.then(() => console.log(`New ${subscribed ? '' : 'un'}subscription confirmation email sent to:`, val.email))
.catch((error) => console.error('There was an error while sending the email:', error));
});
关于javascript - 部署新更改后,Firebase 功能未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099189/
SO亲爱的 friend 们: 2014 年 3 月 18 日。我正在处理一种情况,在使用 ng-repeat 时,数组内的元素(我从 Json 字符串中获取)更改了原始顺序。 需要明确的是,数组中的
有很多问题询问如何在 JavaScript 单击处理程序中更改 div 的类,例如,此处:Change Div style onclick .我理解得很好(只需更改 .className),并且它有效
我从access导入了一个数据库到mysql,但其中一个表的列名“股数”带有空格,但我尝试更改、替换甚至删除列名,但失败了。任何人都可以帮助解决这一问题 String UpdateQuary = "U
我正在做一个随机的学校元素。 目前,我有一个包含两个 CSS 的页面。一种用于正常 View ,一种用于残障人士 View 。 此页面还包括两个按钮,它们将更改使用的样式表。 function c
我需要使用 javascript 更改 HTML 元素中的文本,但我不知道该怎么做。 ¿有什么帮助吗? 我把它定义成这样: Text I want to change. 我正在尝试这样做: docum
我在它自己的文件 nav_bar.shtml 中有一个主导航栏,每个其他页面都包含该导航栏。这个菜单栏是一个 jQuery 菜单栏(ApyCom 是销售这些导航栏的公司的名称)。导航栏上的元素如何确定
我正在摆弄我的代码,并开始想知道这个变化是否来自: if(array[index] == 0) 对此: if(!array[index] != 0) 可能会影响任何代码,或者它只是做同样的事情而我不需
我一直在想办法调整控制台窗口的大小。这是我正在使用的函数的代码: #include #include #define WIDTH 70 #define HEIGHT 35 HANDLE wHnd;
我有很多情况会导致相同的消息框警报。 有没有比做几个 if 语句更简单/更好的解决方案? PRODUCTS BOX1 BOX2 BOX3
我有一个包含这些元素的 XELEMENT B Bob Petier 19310227 1 我想像这样转换前缀。 B Bob Pet
我使用 MySQL 5.6 遇到了这种情况: 此查询有效并返回预期结果: select * from some_table where a = 'b' and metadata->>"$.countr
我想知道是否有人知道可以检测 R 中日期列格式的任何中断的包或函数,即检测日期向量格式更改的位置,例如: 11/2/90 12/2/90 . . . 15/Feb/1990 16/Feb/1990 .
我希望能够在小部件显示后更改 GtkButton 的标签 char *ButtonStance == "Connect"; GtkWidget *EntryButton = gtk_button_ne
我正在使用 Altera DE2 FPGA 开发板并尝试使用 SD 卡端口和音频线路输出。我正在使用 VHDL 和 C 进行编程,但由于缺乏经验/知识,我在 C 部分遇到了困难。 目前,我可以从 SD
注意到这个链接后: http://www.newscientist.com/blogs/nstv/2010/12/best-videos-of-2010-progress-bar-illusion.h
我想知道在某些情况下,即使剧本任务已成功执行并且 ok=2,ansible 也会显示“changed=0”。使用 Rest API 和 uri 模块时会发生这种情况。我试图找到解释但没有成功。谁能告诉
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: add buttons to push notification alert 是否可以在远程通知显示的警报框中指定有
当您的 TabBarController 中有超过 5 个 View Controller 时,系统会自动为您设置一个“更多” View 。是否可以更改此 View 中导航栏的颜色以匹配我正在使用的颜
如何更改.AndroidStudioBeta文件夹的位置,默认情况下,该文件夹位于Windows中的\ .. \ User \ .AndroidStudioBeta,而不会破坏任何内容? /编辑: 找
我目前正在尝试将更具功能性的编程风格应用于涉及低级(基于 LWJGL)GUI 开发的项目。显然,在这种情况下,需要携带很多状态,这在当前版本中是可变的。我的目标是最终拥有一个完全不可变的状态,以避免状
我是一名优秀的程序员,十分优秀!