如何使用Nuxt.js生成一个静态应用,该应用在发布后使​​用express发出发布请求?

时间:2019-06-04 01:33:56

标签: express vue.js post nuxt.js mailgun

我在server / index.js中有一个发布请求,该请求使用两个参数req和res并使用Mailgun的API发送电子邮件。 req.body从位于vue组件中的表单接收数据。一切都按我想要的方式在localhost中运行,但是在部署后停止发送电子邮件。

我在Nuxt.js文档中发现了这一点:使用nuxt generate生成Web应用程序时,给asyncData和fetch的上下文将没有req和res。但是我不知道如何解决该问题并使其在部署后正常工作。

const express = require('express')
const consola = require('consola')
const { Nuxt, Builder } = require('nuxt')

const bodyParser = require('body-parser')
const mailgun = require('mailgun-js')

const app = express()

app.use(bodyParser.urlencoded({extended:false}))

// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = !(process.env.NODE_ENV === 'production')

async function start() {
  // Init Nuxt.js
  const nuxt = new Nuxt(config)

  const { host, port } = nuxt.options.server

  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  } else {
    await nuxt.ready()
  }

  // Give nuxt middleware to express
  app.use(nuxt.render)

  // Listen the server
  app.listen(port, host)
  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true
  })
}
start()

app.post('/', (req, res) => {
  var api_key = 'my_api_key';
  var domain = 'my_domain';
  var mailgun = require('mailgun-js')({apiKey: api_key, domain: 
domain});

  var data = {
    from: `From ${req.body.userName} <${req.body.email}>`,
    to: 'my_email@gmail.com',
    subject: `Msg From Terminal`,
    text: `Message: ${req.body.message}`
  };

  mailgun.messages().send(data, function (error, body, event) {
    console.log(error, body, event);
  });
  res.redirect('/')
})

我也尝试了来自客户端的发帖请求,但后来被CORS阻止,因此我的技能没有更多花招。

0 个答案:

没有答案