Иногда Heroku показывает ошибку приложения для моего приложения Express.js - PullRequest
0 голосов
/ 13 мая 2019

Иногда это работает (может перейти к моему API в моем развернутом приложении Express.js), а иногда нет (вместо этого отображается ошибка приложения). Приложение Express, которое я создал, было запущено с помощью команды express generator, которая генерирует экспресс-проект по умолчанию с домашней страницей. Также необходимо помнить, что порт определяется не в файле app.js, а в файле www внутри папки bin. Вот как это выглядит (на самом деле, вы можете ввести команду для генерации Express, чтобы иметь почти тот же проект решения, что и мой, но www будет абсолютно таким же):

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

Я поместил «web: node ./bin/www» в свой Procfile, который находится в корне моего проекта, потому что www находится внутри папки bin .:

web: node ./bin/www

На package.json у меня есть

"scripts": {
    "start": "node ./bin/www"
  },

Я четко следовал инструкциям в следующем порядке:

heroku login
git init
heroku git:remote -a myapp
git add .
git commit -am "make it better"
git push heroku master

При первом запуске приложения все работает, моя домашняя страница, API и т. Д., Но через некоторое время, когда я захожу в свое приложение, я получаю сообщение об ошибке приложения, и после этого оно снова работает и т. Д.

Вот ошибка, которую я получаю, введя команду "heroku logs --tail":

2019-05-13T21:10:42.528090+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/api/items" host=fmjapi.herokuapp.com request_id=d8b9ad7b-73f5-42fa-915e-c4da9e0660
c5 fwd="109.128.144.114" dyno= connect= service= status=503 bytes= protocol=https
2019-05-13T21:10:42.765654+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=fmjapi.herokuapp.com request_id=4767c4a4-3fcf-4bca-bb09-cb208a5e
e443 fwd="109.128.144.114" dyno= connect= service= status=503 bytes= protocol=https

Там написано, что desc = "Приложение зависло" method = GET path = "/ api / items", что, как я полагаю, должно быть в файле элементов. Но странно, что иногда это работает безупречно, поэтому я сомневаюсь, но в любом случае вот оно:

Items.js

const express = require('express');
const connection = require('../db');

let router = express.Router();

router.get('/', function (req, res) {
    connection.dbConnection.query(connection.QUERIES[0], function (error, result) {
        if (error) res.sendStatus(500);
        else {
            res.json(result);
        }
    })
});

router.put('/:id/found', function (req, res) {
    let id = req.params['id'];
    let isFound = parseInt(req.body.isFound);

    if (isFound !== 1) return res.sendStatus(400);

    connection.dbConnection.query(connection.QUERIES[1], [isFound, id], function (error) {
        if (error) res.sendStatus(500);
        else {
            res.sendStatus(200);
        }
    })
});

router.put('/:id/searching', function (req, res) {
    let id = req.params['id'];
    let searching = parseInt(req.body.searching);

    if (searching !== 1) return res.sendStatus(400);

    connection.dbConnection.query(connection.QUERIES[2], [searching, id], function (error, result) {
        if (error) res.sendStatus(500);
        else {
            res.sendStatus(200);
        }
    })
});

module.exports = router;

connection.QUERIES [число], которое вы видите выше, это просто sql запросы, которые я определил внутри массива QUERIES в db.js

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

2019-05-13T21:23:31.919159+00:00 heroku[router]: at=info method=GET path="/api/items/" host=fmjapi.herokuapp.com request_id=c4dc809d-2418-494c-a2a6-6a259bab3c0e fwd="109.128.144.114" dyn
o=web.1 connect=0ms service=24ms status=304 bytes=325 protocol=https
2019-05-13T21:23:31.915276+00:00 app[web.1]: GET /api/items/ 304 23.439 ms - -

Не говоря уже, этот проект уже прошел git init для других удаленных репозиториев, но затем я удалил эти старые пульты, потому что они мне больше не нужны. Таким образом, единственным удаленным репо, к которому подключен мой проект, является heroku.

Да, и последнее: я использую бесплатную версию Heroku.

UPDATE

я удалил

  "scripts": {
    "start": "node ./bin/www"
  },

из моего package.json и фиксируй и толкай его к героку. И угадай что? Это работает без этого! Похоже, что сценарий запуска из Procfile было достаточно. Может быть, это как-то связано с двумя одинаковыми сценариями, запущенными на обоих package.json, как на Procfile? Иногда это может быть причиной взлома приложения.

ОБНОВЛЕНИЕ 2

Я удалил код запуска скрипта из пакета json и разрешил запуск только кода Procfile. К сожалению, я все еще получаю эту ошибку приложения.

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