Иногда это работает (может перейти к моему 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. К сожалению, я все еще получаю эту ошибку приложения.