#reactjs #proxy #create-react-app
Вопрос:
Я искал повсюду, чтобы попытаться понять, почему это не работает. У меня есть два приложения, клиент и сервер. Я хотел бы перенаправлять запросы клиентов на сервер. У меня есть маршрут, который называется /api/repositories
. У меня не может быть прокси-сервера в файле package.json, потому что он также должен работать в рабочей среде.
Это проект создания приложения для реагирования. Вот важные файлы.
setupProxy.js
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = (app) => {
app.use(
createProxyMiddleware("/api", {
target: "http://my.server.com",
changeOrigin: true,
onProxyReq: (proxyReq) => {
console.log("logged");
if (proxyReq.getHeader("origin")) {
proxyReq.setHeader("origin", "http://my.server.com");
}
},
})
);
};
И я использую его в функциональном компоненте React, называемом панелью поиска, как таковой:
Searchbar.js
import axios from "axios"
async function getRepos() {
const response = await axios({
method: "GET",
url: "/api/repositories",
});
return response.data;
}
function Searchbar() {
const [repos, setRepos] = useState([]);
// Get the repos on load
useEffect(async () => {
setRepos(await getRepos());
}, []);
return (
<div>
{repos.map((repo) => <p>{repo}<p>)}
</div>
);
}
Однако, когда я запускаю npm run start
и запускаю сервер разработки, все мои запросы API будут http://localhost:3000/api/repositories
выполняться , что, очевидно, возвращает ошибку 404. Что я делаю не так?
Комментарии:
1. Можете ли вы попробовать это: использовать прокси-сервер React, чтобы опередить CORS и использовать HTTPS для вызовов API и использовать шлюз API в производстве?
2. Я не могу добавить прокси-сервер в свой
package.json
файл, так как это повлияет на него только в режиме разработки, и он мне нужен для работы в рабочей среде. Я развертываю это с помощью Heroku, что нарушает сборку, если в ней остался проксиpackage.json
-сервер .3. Что ломается в Героку? Вы вообще не должны использовать сервер разработки в производстве.
4. Когда я развертываю этот проект на Heroku, у меня есть файл Procfile, установленный как:
web: npm run start
. Он строится правильно, но я получаю HTML-страницу, на которой просто написано «Недопустимые заголовки хоста», когда я посещаю страницу, на которой я развернут. Интернет говорит мне, что это означает, что я оставил свойство прокси в своемpackage.json
файле, и когда я удаляю его, он развертывается и отображается правильно.