React.js : Heroku: Ошибка: ENOENT: нет такого файла или каталога, статистика ‘/app/src/client/build/index.html ‘

#node.js #reactjs #heroku

#node.js #reactjs #heroku

Вопрос:

Приношу свои извинения, если это неправильный способ сделать это. Я потратил 4 дня на эту проблему и в конце концов нашел решение, я просто хотел бы опубликовать это возможное решение, если кто-нибудь еще столкнется с этой проблемой.

Я запускаю Node.js сервер с клиентом React внутри него вот изображение структуры папок для справки.

Структура папок

Я использую скрипт postbuild в package.json для создания своего проекта на heroku

По причинам, которые мне недоступны, следующий оператор GET catch all

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

Возвращался путь ‘/app/src/client/build/index.html ‘это неверный путь, поскольку ваше приложение размещено на /app/client/build/index.html Мне пришлось отредактировать свое утверждение GET catch all следующим образом.

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

Теперь он правильно перенаправляет на мой индексный файл, и приложение работает правильно. Как я уже сказал, к сожалению, я не могу объяснить, почему __dirname не указывает на нужную папку, поэтому, если кто-нибудь может пролить свет на это, будет здорово.

Также надежность решения может быть проблемой, так как в случае изменения файловых структур Heroku оператор GET catch all может сломаться.

Ответ №1:

__dirname возвращает путь к папке, содержащей выполняемый файл.

Так что, если содержащий код __dirname находится в файле ‘/app/src/app.js ‘, __dirname разрешится как ‘/app/src’. Если ваш __dirname находится в файле ‘/app/foo/bar/baz.js ‘, он будет разрешен как ‘/app/foo/bar’.

Поскольку вы хотите, чтобы ваш путь разрешался как ‘/ app / client / …’, ваше исправление хорошее.

Решение, которое вы использовали, должно быть достаточно надежным. path.resolve() установит ваш рабочий каталог (тот, в котором вы запускаете свое приложение, поэтому, я полагаю, ‘/ app’ на heroku) в качестве корня вашего пути. Так что, если вы не измените имена каталогов или не переместите файлы, все должно быть в порядке.

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

1. Спасибо за разъяснение!! Удивительно, что я нигде не смог найти это отмеченное. Я думаю, это проблема, когда вы новичок, вы не совсем понимаете, как работают команды. Моя вина в реорганизации файловой структуры.