#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) Кроме того, может быть, вы можете стереть кэш и позволить динамо-аппарату перезагрузиться или что-то в этом роде? Похоже, что есть какая-то предыдущая застрявшая сборка?