Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Firebase不响应云功能_Reactjs_Firebase_Firebase Realtime Database - Fatal编程技术网

Reactjs Firebase不响应云功能

Reactjs Firebase不响应云功能,reactjs,firebase,firebase-realtime-database,Reactjs,Firebase,Firebase Realtime Database,我正在使用React JS、一个联系人表单和初始化的firebase向实时数据库添加数据。这一切都有效 然而,我正试图实现一个电子邮件发送给我时,一个新的联系方式已经提交。当前的问题:当我提交表单(并且添加了实时数据库)时,云功能还没有部署,什么都没有发生。firebase控制台中甚至没有错误消息 请你看看我的代码,并提供一些建议,如何让我可以自动发送电子邮件 const functions = require('firebase-functions') const admin = requir

我正在使用React JS、一个联系人表单和初始化的firebase向实时数据库添加数据。这一切都有效

然而,我正试图实现一个电子邮件发送给我时,一个新的联系方式已经提交。当前的问题:当我提交表单(并且添加了实时数据库)时,云功能还没有部署,什么都没有发生。firebase控制台中甚至没有错误消息

请你看看我的代码,并提供一些建议,如何让我可以自动发送电子邮件

const functions = require('firebase-functions')
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
admin.initializeApp()
require('dotenv').config()

const email = process.env.REACT_APP_SENDER_EMAIL;
const pass = process.env.REACT_APP_SENDER_PASS;

exports.sendEmailNotification = functions.firestore.document('messages/{id}')
  .onCreate((snap, ctx) => {
    const data = snap.data();
    let authData = nodemailer.createTransport({
      host: 'smtp.gmail.com',
      port: 465,
      secure: true,
      auth: {
        user: email,
        pass: pass
      }
    });
    authData.sendMail({
      from: data.email,
      to: data.to,
      subject: data.name + ' sent a message',
      text: data.text,
    }).then(res => console.log('email sent')).catch(err => console.log(err));
  });

您的函数需要返回一个承诺,该承诺在所有异步工作完成时解析

return authData.sendMail({
  from: data.email,
  to: data.to,
  subject: data.name + ' sent a message',
  text: data.text,
})

回报这一承诺让云功能知道何时可以安全地清理并继续工作。

我最初也尝试将其创建为firebase云功能,但我转向在服务器上构建NodeEmailer。在使用firebase云功能时,我使用了package.json中降级到node:8的漏洞(该漏洞已被弃用),我被迫制定了Google firebase付费计划。这两件东西都把我逼到了一个我不想进入的角落

这是node.js中nodeEmailer的结果,感谢

const express=require('express'))
require('dotenv').config()
const bodyParser=require('body-parser')
const exphbs=require('express-handlebar'))
const path=require('路径')
const nodemailer=require('nodemailer')
const app=express()
const email_from=process.env.email_from;
const sender_pass=process.env.sender_pass;
const email_to=process.env.email_to;
//查看引擎设置
app.engine('handlebar',exphbs())
应用程序集(“查看引擎”、“把手”)
//体分析器
use(bodyParser.urlencoded({extended:false}));
use(bodyParser.json());
//静态文件夹
app.use('/public',express.static(path.join(\uu dirname,'public'))
应用程序获取(“/”,(请求,请求)=>{
res.render('contact',{layout:false})
})
app.post('/send',(req,res)=>{
常量输出=`
你有一个新的提交

联系方式
  • 名称:${req.body.Name}
  • 公司:${req.body.Company}
  • 电子邮件:${req.body.Email}
  • 电话:${req.body.Phone}
消息 ${req.body.message}

`; 异步函数main(){ //从ethereal.email生成测试SMTP服务帐户 //仅当您没有用于测试的真实邮件帐户时才需要 //让testAccount=等待NodeEmailer.createTestAccount(); //使用默认SMTP传输创建可重用的传输对象 让transporter=nodeEmailer.createTransport({ 主机:“smtp.ethereal.email”, 港口:587, 安全:false,//对于465为true,对于其他端口为false 认证:{ 用户:电子邮件地址:, 通行证:发送者通行证 }, }); //使用定义的传输对象发送邮件 let info=wait transporter.sendMail({ 发件人:电子邮件地址:, 致:电邮至:, 主题:“Dean Productions提交的新资料!”, 文本:“新提交”, html:输出, }); console.log(“发送的消息:%s”,info.messageId); //已发送的消息: //预览仅在通过Ethereal帐户发送时可用 log(“预览URL:%s”,nodeEmailer.getTestMessageUrl(info)); //预览URL:https://ethereal.email/message/WaQKMgKddxQDoou... res.render('contact',{layout:false,msg:'Message has sent!'}) } main().catch(console.error); }) app.listen(3000,()=>console.log('服务器已启动…'))
console记录snap和ctx参数,并在此处显示{“@type”:“type.googleapis.com/google.cloud.audit.AuditLog”,“status”:{},“authenticationInfo”:{“principalEmail”:“james”_ross@outlook.fr“},”serviceName:“cloudfunctions.GoogleAppis.com”,“methodName:“google.cloud.functions.v1.CloudFunctionsService.CreateFunction”,“resourceName”:“projects/react-website-afe39/locations/us-central1/functions/sendmailnotification”}这是在Firebase上的控制台日志中返回的所有信息,您的控制台是什么?snap还是ctx?我做了console.log(snap,ctx);
    const express = require('express')
require('dotenv').config()
const bodyParser = require('body-parser')
const exphbs = require('express-handlebars')
const path = require('path')
const nodemailer = require('nodemailer')


const app = express()

const email_from = process.env.EMAIL_FROM;
const sender_pass = process.env.SENDER_PASS;
const email_to = process.env.EMAIL_TO;


// View engine setup
app.engine('handlebars', exphbs())
app.set('view engine', 'handlebars')

//body parser
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


//static folder
app.use('/public', express.static(path.join(__dirname, 'public')))

app.get('/', (req, res) => {
    res.render('contact', { layout: false })
})

app.post('/send', (req, res) => {
    const output = `
    <p>You have a new submission</p>
    <h3>Contact Details</h3>
    <ul>
    <li>Name: ${req.body.name}</li>
    <li>Company: ${req.body.company}</li>
    <li>Email: ${req.body.email}</li>
    <li>Phone: ${req.body.phone}</li>
   
    </ul>
    <h3>Message</h3>
    <p> ${req.body.message} </p> `;

    async function main() {
        // Generate test SMTP service account from ethereal.email
        // Only needed if you don't have a real mail account for testing
        // let testAccount = await nodemailer.createTestAccount();

        // create reusable transporter object using the default SMTP transport
        let transporter = nodemailer.createTransport({
            host: "smtp.ethereal.email",
            port: 587,
            secure: false, // true for 465, false for other ports
            auth: {
                user: email_from,
                pass: sender_pass
            },
        });

        // send mail with defined transport object
        let info = await transporter.sendMail({
            from: email_from,
            to: email_to,
            subject: 'New Submission from Dean Productions!',
            text: 'new submission',
            html: output,
        });

        console.log("Message sent: %s", info.messageId);
        // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>

        // Preview only available when sending through an Ethereal account
        console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
        // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...

        res.render('contact', { layout: false, msg: 'Message has been sent!' })
    }

    main().catch(console.error);
})

app.listen(3000, () => console.log('Server started...'))