Экспресс приложение с использованием MongoDB не работает на Heroku - PullRequest
0 голосов
/ 01 декабря 2019

Я заранее прошу прощения за неопределенность, но я не имею ни малейшего понятия, какую информацию размещать здесь.

Я разрабатывал свой собственный блог, используя Heroku для его развертывания и MongoDB в качестве базы данных. Когда я запускаю сайт локально, все работает отлично. Составлять блоги, публиковать их и просматривать их. Однако когда я захожу в веб-приложение, развернутое на Heroku, я могу загрузить пустую домашнюю страницу или страницу создания. Но как только я захожу на страницу блога или хочу опубликовать сообщение, оно вылетает.

Оба этих действия взаимодействуют с MongoDB, поэтому я могу, по крайней мере, предположить, что проблема возникает при подключении к Mongo. Развернутое веб-приложение находится здесь .

При попытке посетить страницу блога с отображением всех сообщений, я получаю много таких сообщений в консоли Heroku, пока не произойдет сбой через 30 секунд:

at=error code=H12 desc="Request timeout" method=GET path="/blog"

Когда я пытаюсь опубликовать новое сообщение, я получаю это:

at=error code=H12 desc="Request timeout" method=POST path="/compose"

Есть предложения?

РЕДАКТИРОВАТЬ:

Вот какЯ подключаюсь с помощью Mongoose (MYUSERNAME и MYPASSWORD есть только в примере, в реальном проекте они действительно есть):

const express = require('express');
const app = express();
const mongoose = require('mongoose');
let port = process.env.PORT;
if (port == null || port == "") {
  port = 3000;
}
app.listen(port, (req, res) => {
  console.log("Server started listening to port " + port);
});
mongoose.connect("mongodb+srv://MYUSERNAME:MYPASSWORD@coded-by-tom-jk5zo.mongodb.net/blogDB", { useNewUrlParser: true, useUnifiedTopology: true });
let blogDB = mongoose.connection;
blogDB.on('error', console.error.bind(console, 'connection error:'));

blogDB.once('open', function() {
    console.log("Connection to database succesfull.");
});

app.get("/blog", (req, res) => {
  Post.find({}, async (err, posts) => {
    await res.render("blog", {
      posts: posts.reverse()
      });
  });
});

1 Ответ

0 голосов
/ 02 декабря 2019

Я нашел ответ, хотя я не уверен, почему это ответ. Чтобы загрузить приложение в Heroku, вы должны добавить язык и версию языка, который вы используете, в файле packages.json. В курсе, который я смотрел, он был добавлен как раз перед "зависимостями". Я изменил его так, чтобы он был указан в конце файла, и это, похоже, сработало. Так что для тех, у кого есть проблемы с развертыванием их приложений в Heroku, вы можете попробовать это, поскольку это решение, которое я еще не нашел в StackOverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...