Как вызвать функцию узла из внешнего интерфейса - PullRequest
0 голосов
/ 08 июля 2019

У меня есть сервер узлов, который обслуживает мой график.Затем я потребляю это в моем проекте 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')
  })
})
...