Setting up a Full Stack React Application

Setting up a Full Stack React Application

So you've built an API and you've tested it in Postman. You're now ready to build a front end interface using React!

Setting up a client-side application that accesses an API running on localhost sounds messy but it's actually really simple!

Folder Structure

Right now your project folder looks like this:

/my-api-project
  server.js
  /routes
    example.js
  /models
    example.js
  package.json

Go ahead and make a folder called /client and use create-react-app to initialize a new React app within /client:

/my-api-project
  /client
    /node_modules
    package.json
    /public
    README.md
    /src
  server.js
  /routes
    example.js
  /models
    example.js
  package.json

Setting up a Proxy

Right now in Postman you're making requests to http://localhost:<PORT>/example-endpoint. That means you'd have to use the same URL when you're making requests using axios. While this is ok in development mode it won't work when your app is in production because localhost isn't the same when something is deployed to another machine.

create-react-app lets you specify a proxy URL that will be used while developing so that you don't have to go back and change all your URL origins when you deploy your website to the public.

Add the "proxy" property (found at the bottom here) to /client/package.json:

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "react-scripts": "1.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "proxy": "http://localhost:<PORT-GOES-HERE>"
}

Once you've added that line, make sure to restart your React dev server (Control + C then run npm start again) so these changes can take effect.

Now, instead of making HTTP requests like this:

axios.get("http://localhost:8080/example")

You should write them like this:

axios.get("/example")

create-react-app will automatically set the request origin to whatever the "proxy" setting is in package.json while in development mode, but will reset it to wherever it is being served from in production mode without you having to do anything!

Now you are ready to start building your front-end!
You can treat /client as if it were just any other React project you've made so far in the course.