DEV Community

Cover image for Easy backend for React
Jbee - codehooks.io
Jbee - codehooks.io

Posted on

Easy backend for React

How do you set up an easy backend for React? In this example we'll create a simple React app front-end with a Node.js codehooks.io backend API and database. The main objective of this example is to learn how to use codehooks.io as an API backend for your React app.

This article is also available in the Codehooks.io docs.

The output of the React example app is shown in the screen shot below. The "Hello React world!" text and the visitor count is fetched by calling the backend REST API:

react-backend-example

Read on to learn how to create a simple React app front-end and backend application.

Create the React example app

We'll be using the standard create-react-app to kick-start our React example app development.

Run the following commands from your command line:

npx create-react-app react-backend-example

cd react-backend-example
Enter fullscreen mode Exit fullscreen mode

You can also clone the GitHub repo git clone https://github.com/RestDB/codehooks-io-examples.git

The boilerplate React example app is now generated in your application directory.

Then open the src/App.js file in your favorite code editor (some prefer VS Code and others like Vim πŸ₯” πŸ…) and replace the default generated code with the React code example shown below. If you read the code comments you'll get a pretty good idea of what's going on.

import React, { useState, useEffect } from 'react';
import logo from './logo.svg';
import './App.css';

// React backend API endpoint and API token
const API_ENDPOINT = 'https://reactback-nyly.api.codehooks.io/dev/hello';
const API_KEY = 'a4679c85-b4c8-49fb-b8ac-63230b269dd7';

function App() {
  // Application state variables
  const [visits, setVisits] = useState(null);
  const [message, setMessage] = useState(null);

  useEffect(()=>{
    // Call Codehooks backend API
    const fetchData = async () => {
      const response = await fetch(API_ENDPOINT, {
        method: "GET",
        headers: { "x-apikey": API_KEY }
      });
      const data = await response.json();
      // Change application state and reload
      setMessage(data.message);
      setVisits(data.visits);
    }
    fetchData();
  },[])

  return (
    <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h2>
            React backend with Codehooks.io
          </h2>
          <h2 style={{height: '50px'}} className="heading">
            {message || ''}
          </h2> 
          <p>
            Visitors: {visits || '---'}
          </p>          
        </header>
      </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

The React app is almost ready, we just have to create the backend API and database that serve the content of the message and visits variables.

Create the React backend API

The React backend JavaScript example code is located in the index.js file in the reactback directory. The complete code (14 lines and zero config) for the backend API and database is shown below:

// React backend example app
import { app, Datastore } from 'codehooks-js'

// REST API
app.get('/hello', async (req, res) => {
  const db = await Datastore.open();
  // increment visit counter in key-value database
  const visits  = await db.incr('hits', 1);
  res.json({ "message": "Hello React world!", "visits": visits });
});

// bind to serverless runtime
export default app.init();
Enter fullscreen mode Exit fullscreen mode

Now that we have the code for the backend API, we can create our new backend with the init CLI command.
This command creates a new backend application from the source code in the reactback directory.

cd reactback
coho init
Enter fullscreen mode Exit fullscreen mode

Before we can deploy our React backend to the cloud, we must add our npm package dependencies, in this simple example we just have to add the codehooks-js package:

npm i codehooks-js
# deploy the backend application to the codehooks.io cloud service
coho deploy
Enter fullscreen mode Exit fullscreen mode

We also need a read-only API_KEY key for secure access to our API from the React example app, the add-token command fixes this:

coho add-token --readonly
Enter fullscreen mode Exit fullscreen mode

You can also add tokens, set environment variables and more for the backend using the UI at account.codehooks.io

To view our API endpoint and API token(s) we run the info command. If we also add the --examples parameters the CLI will generate example curl commands to test our API πŸ€–. Command example output is shown below:

coho info --examples
Project name: reactback-nyly
Team: Eric Jones (personal account)

API endpoint:  https://reactback-nyly.api.codehooks.io/dev

Examples in cURL:

curl https://reactback-nyly.api.codehooks.io/dev/myroute -H 'x-apikey: a4679c85-b4c8-49fb-b8ac-63230b269dd7' -H 'Content-Type: application/json'

curl --request POST https://reactback-nyly.api.codehooks.io/dev/myroute -H 'x-apikey: <apikey>' -H 'Content-Type: application/json' --data-raw '{"name": "Mr. Code Hooks", "active": true }'

Spaces:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ Name         β”‚  Tokens                                   β”‚ Allowed Hosts β”‚ Jwks β”‚  Env β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚ dev (active) β”‚ a4679c85-b4c8-49fb-b8ac-63230b269dd7 (R)  β”‚               β”‚      β”‚      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

Replace the following variables in the React App.js file with yours from the info command output:

const API_ENDPOINT = 'https://<yourapp>.api.codehooks.io/dev/hello';
const API_KEY = '<your read only API token>';
Enter fullscreen mode Exit fullscreen mode

Start your React app

We are now ready to start the React example app. From the root directory of your React app run the npm start command:

npm start

# your app should start at http://localhost:3000/
Enter fullscreen mode Exit fullscreen mode

Changing your React backend code is easy

Having the data pipeline up and ready between the React app and the backend API makes it easy to make changes and re-deploy your application. If you make changes in the backend code, there is only 1 step you need to do:

  1. From the backend app directory reactback, run the coho deploy command again and the changes to your React backend API are applied immediately πŸ”₯

Summary

Creating a React front-end and backend application is quite easy. Using your favorite tools together with effective CLI commands is a good workflow that supports rapid iterations and faster development.

Full source code is available on GitHub here.

Further reading

For a more comprehensive React example app, check out this this blog post on how to create a serveless quote api. The blog post shows how you can create a React example backend with a large dataset and fast data lookups. For real use cases, you probably don't want to use API keys, but use a service like Auth0 and JWT tokens. Check out our blog post about how to authenticate a React app against a serverless backend API for details.

Happy coding!

Top comments (0)