从JS函数调用NodeJS函数

时间:2018-07-14 05:03:32

标签: javascript node.js firebase email

我正在做一个基于Firebase的项目,我需要链接一个服务器端函数,该函数将电子邮件发送到客户端脚本。

这是我的服务器端index.js文件

const functions = require('firebase-functions');
var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'xxx@gmail.com',
    pass: 'password'
  }
});

var mailOptions = {
  from: 'xxx@gmail.com',
  to: 'xxx@gmail.com',
  subject: 'Sending Email using Node.js',
  text: 'That was easy!'
};

transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log(error);
  } else {
    console.log('Email sent: ' + info.response);
  }
});

我想知道如何在html中有一个按钮来调用脚本中的函数,该函数将调用transporter.sendMail。我以前从未接触过Node js,所以请原谅我缺乏知识。

如果这有助于Firebase设置我的文件夹,以按功能分开,则服务器端和客户端文件的公用文件夹

enter image description here

1 个答案:

答案 0 :(得分:-1)

  

首先使用jQuery初始化HTML页面,并在提交表单后按如下所示向服务器发送一个Ajax请求

$(document).ready(function() {

    $("#formoid").submit(function(event) {
        event.preventDefault();
        $.ajax({
            url: 'http://xxxxxxx.com/contact', // url where to submit the request
            type : "POST", // type of action POST || GET
            dataType : 'json', // data type
            data : $("#formoid").serialize(), // post data || get data
            success : function(result) {
                $('#formoid')[0].reset();
            },
            error: function(xhr, resp, text) {
                console.log(xhr, resp, text);
            }
        })

    });
});
  

contact服务器中创建一个名为NodeJS的路由,并使用您需要的所有参数来监听联系请求。在以下情况下,我使用express serverbody parser解析传入请求中的数据

app.post('/contact', (req, res) => {
    var transporter = nodemailer.createTransport({
        service: "Gmail",
        auth: {
            user: "xxxxx",
            pass: "xxxxx"
        }
    });

    var mailOptions = {
        from: req.body.email,
        to: 'xxxxx@xx.com',
        subject: 'Contact form',
        text: 'From: ' + req.body.name + '\n Email: ' + req.body.email + '\nMessage: ' + req.body.msg
    };
    transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            res.status(500).json({
                message: "Error",
                error: error
            })
        } else {
            res.status(200).json({
                message: "Its working",
                response: info.response
            })
        }
    });
});
  

在上述请求中,正在发送name:as nameemail: as emailmessage: as msg