проблема с промежуточным программным обеспечением сервера при развертывании nuxt-приложения на heroku

#vue.js #express #heroku #deployment #nuxt.js

Вопрос:

У меня возникла проблема с развертыванием nuxt-приложения с некоторым кодом serverMiddleware на Heroku.

это мой код промежуточного программного обеспечения, который просто запускает экспресс-приложение:

 api/index.js
 
 var express = require("express");
var nodemailer = require("nodemailer");
var app = express();

app.use(express.json());
app.use(
  express.urlencoded({
    extended: true
  })
);

app.get("/", (req, res) => {
  res.send("hello world");
});

app.post("/contact", async (req, res) => {
  // let testAccount = await nodemailer.createTestAccount();

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: "mail.exemple.net",
    port: 587,
    secure: false,
    auth: {
      user: process.env.EMAIL_USERNAME,
      pass: process.env.EMAIL_PASSWORD
    }
  });

  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: req.body.email,
    to: "contact@email.com",
    subject: "new contact",
    text: req.body.message
  });

  res.end();
});

app.listen(process.env.PORT);

module.exports = {
  path: "/api",
  handler: app
}; 

затем я зарегистрировал этот файл в nuxt.config.js :

 serverMiddleware: ["~/api/index"], 
 

api отлично работает в режиме разработки (локально).

Я впервые развернул на heroku целевую настройку nuxt , для которой установлено значение static , статическое содержимое работало идеально, но ни один код serverMiddleware не работал (это имеет смысл ^^).

затем я переключился на target: 'server' но теперь, когда я разворачиваюсь, я получаю это сообщение от heroku:

 ✖ Nuxt Fatal Error
Error: Address `0.0.0.0:41828` is already in use
 

я уверен, что мне чего-то не хватает, но я не могу найти решение.

просто чтобы завершить свой пост, я добавил эту строку в файл package.json:

 "heroku-postbuild": "nuxt build"
 

а также файл Procfile в корне моего приложения, который содержит:

 web: nuxt start
 

и, наконец, это мои настройки heroku:config:

 heroku config:set NPM_CONFIG_PRODUCTION=false
heroku config:set HOST=0.0.0.0
heroku config:set NODE_ENV=production
 

Любые советы по правильному способу развертывания очень ценятся.

Комментарии:

1. Действительно полный и ясный вопрос с большим усилием, поздравляю! (Я не часто это вижу) Работает ли это локально? Вероятно, здесь какая-то проблема с сборкой Heroku. Не знаю, почему это может привести к ошибке. У вас где-нибудь есть еще журналы? Можете ли вы попробовать дать ему другой порт? Потому что максимум для HTTP-порта 65535 (с некоторыми зарезервированными): en.wikipedia.org/wiki/Port_(computer_networking) Кроме того, может быть, вы можете стереть кэш и позволить динамо-аппарату перезагрузиться или что-то в этом роде? Похоже, что есть какая-то предыдущая застрявшая сборка?