Я создаю веб-сайт, используя Nuxt, и контактную форму, используя Nodemailer / Express.
Он отражает https://blog.lichter.io/posts/sending-emails-through-nuxtjs/ и хорошо работает на моем локальном хосте, но не в производстве >> возвращает 404 ненайдено сообщение об ошибке.
TIA для справки.
nuxt.config.js
serverMiddleware: [
'~/api/contact'
],
/ api / contact.js
const express = require('express')
const nodemailer = require('nodemailer')
const app = express()
app.use(express.json())
app.get('/', function (req, res) {
res.status(405).json({ error: 'sorry!' })
})
app.post('/', function (req, res) {
sendMail(req.body.payload)
res.status(200).json({ 'message': 'OH YEAH' })
})
module.exports = {
path: '/api/contact',
handler: app
}
const sendMail = (payload) => {
let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
secure: true,
auth: {
user: 'me@gmail.com',
pass: 'mypassword'
},
tls: {
rejectUnauthorized: false
}
})
transporter.sendMail({
from: 'IB Website <me@gmail.com>',
to: 'me@gmail.com',
subject: `Message from ${payload.name}, id: ${Math.random().toString(36).substr(2, 9)}`,
html: `<p><strong>Message:</strong> ${payload.message}</p>
<p><strong>Name:</strong> ${payload.name}</p>
<p><strong>Email:</strong> ${payload.email}</p>
<p><strong>Phone:</strong> ${payload.phone}</p>`
})
}
/компоненты / ContactForm.vue
async sendEmail() {
try {
await this.$axios.$post('/api/contact', {
payload: this.form
})
await new Promise(resolve => setTimeout(resolve, 2500))
} catch (e) {
console.error(e)
}
}