#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. Спасибо за разъяснение!! Удивительно, что я нигде не смог найти это отмеченное. Я думаю, это проблема, когда вы новичок, вы не совсем понимаете, как работают команды. Моя вина в реорганизации файловой структуры.