JSON Serverで文字列を返す方法
公式のGetting startedをもとに、
/profileにリクエストが来た場合、nameの値を文字列として返却する方法を紹介する。
文字列として返したい箇所には、"type": "string"を記載している。
db.json
{"posts":[{"id":1,"title":"json-server","author":"typicode"}],"comments":[{"id":1,"body":"some comment","postId":1}],"profile":{"type":"string","name":"typicode"}}
以下のように、JSON Serverをモジュールとして使用することで、上記内容を返却する前に後処理を行えるようにする。
server.js
constjsonServer=require('json-server')constserver=jsonServer.create()constrouter=jsonServer.router('db.json')constmiddlewares=jsonServer.defaults()// Middleware(前処理)server.use(middlewares)server.use((req,res,next)=>{// 受け取ったリクエストに前処理を行う場合はここに書く// POSTをGETに変換する例if(req.method==='POST'){req.method='GET'}// リクエストURLを書き換える例req.url=req.url.replace(/\./g,"")console.log(req.url)next()})// ルーティングを使用する場合はここに書くserver.use(jsonServer.rewriter({"/api/*":"/$1","/posts\\?id=:id":"/posts/:id",}))server.use(router)// 後処理router.render=function(req,res){// レスポンスに後処理を行う場合はここに書く// db.jsonの返却値に"type":"string"がある場合、nameの値を文字列として返却する例if(res.locals.data.type&&res.locals.data.type==='string'){res.send(res.locals.data.name)}else{// それ以外はdb.jsonに記載したとおり返却するres.send(res.locals.data)}}// モックサーバ起動server.listen(3000,()=>{console.log('JSON Server is running')})
あとは、nodeコマンドで実行する
$ node server.js