Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
So I'm writing a series of automated tests for a single page react application. The tests rely on a mocked api that's exposed on a different port than the application is served from. In order to get around cors issues, the local-web-server instance that serves the SPA is set up to proxy api requests to the backend. Here's the config file for the server:
const server = process.env.SERVER;
const port = process.env.PORT;
module.exports = {
port: port,
rewrite: [
from: '/api/(.*)',
to: `${server}/$1`
logFormat: 'tiny',
spa: 'index.html'
I'm using Selenium Test Containers, and the application is run from a docker image downloaded by the test code. Here's the docker file:
FROM node:10.16.0-alpine
ENV PORT=5000
COPY ./build ./
COPY ./docker ./
EXPOSE ${PORT}
RUN npm config set unsafe-perm true
RUN npm install local-web-server -g
CMD ws --config-file web-server-config.js
The issue that I've been trying to solve for the past two days, is that the proxy is not even attempting to reach the backend. I've been running wireshark to debug since I can't reliably access dev tools in a selenium controlled browser. The proxy receives a request to /api/*, and then returns 504 gateway timeout without even trying to access the backend. There's no [SYN] packet or anything. Does anyone have experience with an issue like this? If you could even just point me in the right direction it would be greatly appreciated.
–
If this is for development, you might want to have a look at the proxy feature for React.js. All you need is to add the following configuration to your package.json
and it will proxy any unknown requests to the provided backend if you are running the app using react-scripts start
i.e. the provided npm start
with create-react-app
.
"proxy": "http://backend:3000",
If your React app and your other backend have both been dockerized with Docker Compose, just make sure the containers are in the name docker network and you can specify in React's proxy config the services
name as it will resolve in docker's DNS.
For example:
version: "2.4"
services:
backend:
image: backend:v0.0.0
networks:
- main
frontend:
build: .
image: frontend:v0.0.0
networks:
- main
ports:
- "5000:5000"
networks:
main:
–
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.