Сервис Heroku 503 недоступен - PullRequest
1 голос
/ 11 февраля 2020

В настоящее время я создаю простое приложение CRUD с использованием ExpressJS и размещаю его на Heroku с использованием бесплатной учетной записи.

Проблема, с которой я столкнулся:

  • GET API для получения всех элементов работает на localhost, но показывает статус 503 при размещении на Heroku;
  • POST API для обновления одного элемента работает на localhost, но та же проблема, что и GET API выше;
  • All 503 ошибки появляются после 30 секунд загрузки, это должна быть настройка Heroku.

У меня есть другие конечные точки API, которые работают как на локальном сервере, так и на сервере Heroku:

  • ПОЛУЧИТЬ API для получения одного элемента с использованием идентификатора

Мои предположения:

  • Проблема не должна быть связана с кодом
  • Существует некоторая проблема, когда код развернут, и Heroku не может обработать этот запрос , Благодарим вас за комментарии.

    Мой понедельник goose Схема

    const mongoose = require("mongoose");
    
    const ThoughtSchema = mongoose.Schema({
      title: {
        type: String,
        required: true
      },
      content: {
        type: String,
        required: true
      },
      date: {
        type: Date,
        default: Date.now
      }
    });
    
    module.exports = mongoose.model("Thought", ThoughtSchema);
    

    2 конечных пункта, которые не работают

    // Returns all thoughts
    router.get("/", async (req, res) => {
      try {
        const thought = await Thought.find();
        res.json(thought);
      } catch (err) {
        res.json({ message: err });
      }
    });
    
    // Submit a post
    router.post("/", async (req, res) => {
      const thought = new Thought({
        title: req.body.title,
        content: req.body.content
      });
    
      try {
        const savedThought = await thought.save();
        res.json(savedThought);
      } catch (err) {
        res.json({ message: err });
      }
    });
    

    Конечная точка, которая работает

    // Specific thought
    router.get("/:thoughtId", async (req, res) => {
      try {
        const thought = await Thought.findById(req.params.thoughtId);
        res.json(thought);
      } catch (err) {
        res.json({ message: err });
      }
    });
    

    Мой пакет. json для этого express приложение

    {
      "name": "my-thoughts-app",
      "version": "0.1.0",
      "description": "An app to records user's thoughts",
      "main": "index.js",
      "scripts": {
        "start": "node index.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/PayneTang/my-thoughts-app.git"
      },
      "author": "Payne Tang",
      "license": "ISC",
      "bugs": {
        "url": "https://github.com/PayneTang/my-thoughts-app/issues"
      },
      "homepage": "https://github.com/PayneTang/my-thoughts-app#readme",
      "dependencies": {
        "dotenv": "^8.2.0",
        "express": "^4.17.1",
        "mongoose": "^5.8.11"
      },
      "devDependencies": {
        "typescript": "^3.7.5"
      }
    }
    

    РЕДАКТИРОВАТЬ: Мой индекс. js

    const express = require("express");
    const path = require("path");
    const app = express();
    const mongoose = require("mongoose");
    const thoughtRoute = require("./routes/thought");
    require("dotenv").config();
    
    console.log(process.env);
    
    // Mongoose settings
    mongoose.connect(
      process.env.DB_CONNECTION,
      { useNewUrlParser: true, useUnifiedTopology: true },
      () => {
        console.log("Connected to DB!");
      }
    );
    
    app.use(express.json());
    app.use((req, res, next) => {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Methods", "*");
      res.header(
        "Access-Control-Allow-Headers",
        "Origin, X-Requested-With, Content-Type, Accept"
      );
      next();
    });
    
    app.use("/api/thought", thoughtRoute);
    app.get("/api/test", (req, res) => {
      res.send("hi");
    });
    
    // Serve client side
    app.use(express.static(path.join(__dirname, "client/build")));
    app.use(express.static(path.join(__dirname, "client/public")));
    // app.get("*", (req, res) => {
    //   res.sendFile(path.join(__dirname, "client/build/index.html"));
    // });
    
    const PORT = process.env.PORT || 5000;
    app.listen(PORT, () => {
      console.log("Listening on port " + PORT + "...");
    });
    

1 Ответ

0 голосов
/ 18 февраля 2020

Причина root после проверки связана с ограничением доступа из Heroku в понедельник go атлас.

После добавления 0.0.0.0/0 для белого списка IP-адресов я могу получать данные из MongoDB .

Ссылка: https://docs.atlas.mongodb.com/security-whitelist/#add -белые списки записей

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