Как включить маршрутизацию URL в приложении Node and Elm (Heroku)? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть приложение elm, работающее на Heroku.

Я не хотел использовать сторонний сборочный пакет elm, поэтому я скомпилировал файлы elm локально и поместил elm. js на сервер Heroku.

Мое приложение использует Node.js бэкэнд, поэтому я использую этот код в выражениях для обслуживания индекса. html:

if(process.env.NODE_ENV === 'production') {
  app.use(express.static('client'));

  app.get('*', (res:any) => {
    res.sendFile(path.resolve(__dirname, 'client', 'index.html'));
  });
}

Я могу go к URL-адресу heroku и все работает отлично. Если я нажму на внутреннюю ссылку /login, я перенаправлюсь на страницу login, и мой URL-адрес изменится на ww.mywebsite.com/login. Внутренняя маршрутизация не является моей проблемой.

Это моя проблема: Хотя внутренняя маршрутизация работает, если бы я вместо этого вручную писал www.mywebsite.com/login в панели навигации видя страницу login, я вижу Internal Server Error

Как мне это исправить? Нужна ли мне сборка герою для выполнения sh этого?

1 Ответ

1 голос
/ 11 марта 2020

Как отметил @kaskelotti в комментариях, Internal Server Error печатал, потому что файлы были найдены, но после их обнаружения произошла другая ошибка. Если бы файлы не были найдены, я получил бы ошибку 404.

Это была синтаксическая ошибка в моем коде express, которая соответствовала всем запросам с моим индексом stati c. html file.

Код, размещенный в моем вопросе, неверен, вот как он должен выглядеть:

if(process.env.NODE_ENV === 'production') {
  app.use(express.static('client'));

  app.get('*', (req , res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'index.html'));
  });
}

Разница заключается в аргументе функции обратного вызова в app.get. Первоначально это был (res) вместо (req, res), поэтому переменная res была принята за объект типа Request, а не Response, так как это был первый аргумент.

Также как @ Каскелотти отметил, что Героку не имеет отношения к этой проблеме.

...