У меня есть сервер узлов, который обслуживает мой график.Затем я потребляю это в моем проекте next.js.Теперь я хочу добавить контактную форму на одну из страниц.Теперь в настоящее время у меня есть файл server.js в проекте next.js, который обрабатывает это.см. код ниже.
Я хотел бы вызвать функцию на сервере graphql, чтобы я мог передать поля формы и затем отправить электронное письмо.
отсутствуетделать это без использования Express?
graphql.js (в отдельной папке)
const {
makeRemoteExecutableSchema,
introspectSchema
} = require("graphql-tools");
const { HttpLink } = require("apollo-link-http");
const fetch = require("node-fetch");
const { GraphQLServer } = require("graphql-yoga");
// Apollo link with the uri of GraphQL API
const link = new HttpLink({
uri: "https://api-euwest.graphcms.com/v1/cjsnh2qfp3099e01fjurcavk7i/master",
fetch
});
async function startServer() {
const schema = await introspectSchema(link);
const executableSchema = makeRemoteExecutableSchema({
schema,
link
});
const server = new GraphQLServer({ schema: executableSchema });
server.start(
{
cors: {
credentials: true,
origin: ["http://localhost:3000"] // your frontend url.
}
},
deets => {
console.log(
`Server is now running on port http://localhost:${deets.port}`
);
}
);
}
startServer();
server.js
const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')
const nodemailer = require('nodemailer');
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'adamjwright32@gmail.com',
pass: 'Zeppelin32'
}
});
const send = ({ email, name, message }) => {
const mailOptions = {
from: 'hello@adamwright.dev',
to: 'adam.wright90@yahoo.co.uk',
subject: `New message from ${name}`,
html: `<div>
<strong>Name:</strong>${name}<br>
<strong>Email:</strong>${email}<br>
<strong>Message:</strong><br>${message}
</div>`
}
transporter.sendMail(mailOptions, function (err, info) {
if (err)
console.log("err", err)
else
console.log("info", info);
});
}
app.prepare().then(() => {
const server = express()
server.use(bodyParser.json())
server.get('*', (req, res) => {
return handle(req, res)
})
server.post('/api/contact', (req, res) => {
send(req.body)
res.send('success')
})
server.listen(3000, (err) => {
if (err) throw err
console.log('> Read on http://localhost:3000')
})
})