Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jsonserver not redirecting using rewriter

I have an employees endpoint with some data in my db.json. I'm using node v6.14.9.

My server.js looks like this:

// server.js
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()
 
server.use(middlewares)
server.use(jsonServer.rewriter({
  '/api/*': '/$1'
}))
server.use(router)
server.listen(3000, () => {
  console.log('JSON Server is running')
})

Server starts on port 3000. If I open ht​tp://localhost:3000/employees, it works fine. However, opening ht​tp://localhost:3000/api/employees throws error 404 not found. Any suggestion what I'm doing wrong?

like image 670
user3921104 Avatar asked Sep 16 '25 14:09

user3921104


1 Answers

Just in case anyone stumbles here like I did, there's two ways to start json-server. And depending on how you start json-server will dictate where you put your rewrites:

Method one (official docs) is defining your rewrites in a routes.json file. Your routes.json will look like this:

routes.json

{
  '/api/*': '/$1'
}

and then you can start json-server using the command, assuming both db.json and routes.json are in the same folder:

json-server db.json --routes routes.json

Method two (official docs) is creating a server.js file like the one in your example and you pass a json object with your rewrites to server.use(jsonServer.rewriter()):

server.use(jsonServer.rewriter(
    //json object with rewrites
));

Remember, in server.js file, your rewrites must come before server.use(router). So like in your example, your rewrites will indeed look like this:

server.use(jsonServer.rewriter({
  '/api/*': '/$1'
}));
server.use(router);

And then the server will be started with this line in server.js:

server.listen(3000, () => {
  console.log('JSON Server is running')
});

So to start json-server with server.js you just use node:

node server.js

So the thing to note is that when you use Method 1, json-server doesn't know anything about your rewrites in server.js.

And likewise when you use Method 2, json-server will not know anything about your rewrites in routes.json. So you have to pick whichever suits your needs best.

like image 95
njuki Avatar answered Sep 18 '25 03:09

njuki