Думаю, мне здесь не хватает чего-то очень простого. У меня есть простое одностраничное приложение node.js, которое использует nodemailer для отправки любых данных формы в мой почтовый ящик.
Мой файл index.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var nodemailer = require('nodemailer');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '[email protected]',
pass: 'mypassword'
}
});
app.use(express.static('public')); //public folder with my html files
app.get('', function (req, res) {
res.sendFile(__dirname + "/");
})
app.post('/', function (req, res) {
response = {
name: req.body.name,
email: req.body.email,
message: req.body.message
};
var mailClient = {
from: '[email protected]',
to: '[email protected]',
subject: `Message from ${response.name}`,
text: 'MyMessage'
};
transporter.sendMail(mailClient, function (error, info) {
if (error) {
console.log(error); //not happening
} else {
res.redirect("/success.html"); //also not happening
}
});
})
var server = app.listen(80, function () {
var host = server.address().address
var port = server.address().port
console.log("App listening at http://%s:%s", host, port)
})
Когда я запускаю это на своем локальном компьютере, используя npm start
в корневом каталоге, приложение отлично работает на localhost
. Nodemailer работает правильно; когда я отправляю, мои данные формы отправляются мне по электронной почте, и я перенаправляюсь на свою страницу успеха.
Однако, когда я развертываю это в Firebase, кажется, что часть nodemailer не работает. Страница загружается с моими статическими файлами, но когда я пытаюсь отправить что-либо через форму, страница просто обновляется (например, когда у вас есть кнопка отправки с пустым HTML), вместо того, чтобы перенаправлять меня на мою страницу успеха и отправлять данные по электронной почте.
Есть ли что-то, что мне нужно изменить в моем коде, чтобы он работал с firebase?
console.log(error)
выполняется в облачных функциях на сервере, журнал будет отображаться в панель ведения журнала Cloud Functions на консоли Firebase. - person Frank van Puffelen   schedule 09.12.2017transporter
? Трудно помочь, не увидев минимального полного кода, воспроизводящего проблему. Но я предполагаю, что вы пытаетесь связаться с почтовым сервером, который не находится в домене Google. Подключение к внешним сервисам разрешено только на платных планах. См. А.о. stackoverflow.com/questions/44259405/ - person Frank van Puffelen   schedule 11.12.2017firebase serve --only functions
и посмотрите, сможете ли вы запустить его таким образом. - person Frank van Puffelen   schedule 15.12.2017firebase serve --only functions
, я получаю! functions: Cannot start emulator. Error: Cannot find module 'C:\Users\me\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\grpc\src\node\extension_binary\node-v48-win32-x64-unknown\grpc_node.node'
- person user7548189   schedule 17.12.2017