#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.
Комментарии:
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
, а не импортировать его.