Код ошибки Heroku H13 при попытке открыть приложение

#node.js #express #heroku #hosting

#node.js #экспресс #heroku #хостинг

Вопрос:

Я попытался развернуть свой node.js приложение к Heroku, которое работало нормально, пока я не попытаюсь подключиться к нему (откройте приложение). Ошибка get выглядит следующим образом:

 2021-02-18T00:16:03.975921 00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=gtdb.herokuapp.com request_id=16579da6-aa8e-4184-8e1c-7ac9680d0078 fwd="-myipaddresswhichidontwanttoshare-" dyno=web.1 connect=0ms service=1ms status=503 bytes=0 protocol=https
 

Мой код:

 const express = require("express");
const https = require("https");
app = express();
const options = {
    key: fs.readFileSync("./server.key"),
    cert: fs.readFileSync("./server.crt")
};
const server = https.createServer(options, app);
server.listen(process.env.PORT);
 

Конечно, я искал проблему, и некоторые сайты говорят, что это может быть тайм-аут, и их ошибки имели время подключения и обслуживания до 30000 мс, когда тайм-аут имел бы смысл, но я далек от 30-х годов, поэтому я не знаю, в чем проблема.
Приложение не вылетает после того, как выдает эту ошибку.
Любая помощь приветствуется. Заранее спасибо.

Ответ №1:

Серверы Heroku контролируются их балансировщиками нагрузки, которые завершают SSL и отправляют запрос на ваш сервер без SSL.

Таким образом, вы должны использовать HTTP сервер, а HTTPS не на Heroku.

Вы можете использовать этот пакет https://github.com/paulomcnally/node-heroku-ssl-redirect / для перенаправления любого входящего HTTP-трафика с клиента на HTTPS.

https://mishkaorakzai.medium.com/how-to-redirect-your-node-js-app-hosted-on-heroku-from-http-to-https-50ef80130bff

Комментарии:

1. спасибо за ваш ответ. когда я пытаюсь реализовать пакет, который вы рекомендовали, я получаю следующую ошибку: app.use(sslRedirect()); TypeError: sslRedirect is not a function

2.@KnechtNoobrecht github.com/paulomcnally/node-heroku-ssl-redirect/issues /… import herokuSSLRedirect from 'heroku-ssl-redirect' const sslRedirect = herokuSSLRedirect.default или const sslRedirect = require('heroku-ssl-redirect').default

3. Когда я пытаюсь импортировать его, я получаю сообщение об ошибке Cannot use import statement outside a module . Итак, я изменил свой файл на app.mjs, установил «type» на «module» в package.json и добавил эти строки кодов, чтобы работал мой другой импорт: import { createRequire } from 'module' const require = createRequire(import.meta.url); теперь, когда я пытаюсь импортировать свои модели mongodb из другого файла import {Book} from "./models/book.js"; , я получаю SyntaxError: The requested module './models/book.js' does not provide an export named 'Book' . Файл, который я хочу импортировать, заканчивается module.exports = Book;

4. Решаемая с помощью const sslRedirect = require('heroku-ssl-redirect').default , а не импортировать его.