1 min read

How to use json-server as a backend for your practice apps

Building a custom backend for your apps can be fun and is definitely something I recommend doing at some point. But when you're in the middle of learning React and you just want to practice frontend concepts, it's great if you don't have to code a backend from scratch.

This is where json-server comes in - it's a simple backend server that allows you to have a full REST API based on just a JSON file you define locally. You can add, edit, remove items from the json collection, and the file gets updated, acting like a local database.

Here's an example "database" for a notes app:

// db.json
{
    "notes": [
        {
            "id": 1,
            "title": "jane's phone number",
            "content": "555 666 777"
        },
        {
            "id": 2,
            "title": "shopping list",
            "content": "- milk\n-strawberries"
        }
    ]
}

When you start the json-sever with by calling json-server db.json, it will start a server at http://localhost:3000 with a REST endpoint dedicated to the notes, for doing CRUD operations on them:

GET    /notes 
GET    /notes/:id
POST   /notes 
PUT    /notes/:id
PATCH  /notes/:id
DELETE /notes/:id

This is usually all you need to get started with your frontend app!

For development, I usually recommend adding the command to start the server to your package.json, so you can run it with a simple npm run backend-server:

// package.json
...
"scripts": {
    "dev": "vite",
    "test": "vitest",
    ...
    "backend-server": "json-server db.json"
  },
...

And what if you want to simulate a server error?
The simplest way is to just stop the server with Ctrl+C - then the frontend will get a 500 Server Unavailable error.
Another way is to use Chrome's Network tab > throtling to simulate being offline.

Alternatively, if you're looking to throw validation errors, you could set up an express sever that uses json-server as a module, but it's probably not worth the trouble for most practice apps.

I hope you find this useful!