JSON Server(Mock)メモ
Qiitaで検索しても、いまいち、どれがどれなんだ!?という感じですが、JSON Serverで、ローカル用のモックサーバーを立ち上げる際、db.jsonと連携させるのに苦心したので、メモ
修正前
server.js
server.get('/api/check', (req, res) => { const p = { registered: false, expired: false, } switch (req.query.username) { case 'hogehoge': // ユーザーA p.registered = true break case 'hogeeee': // ユーザーB p.registered = true p.expired = true break default: break } res.jsonp(p) })
db.json(この時点では使用していません)
{ "list": [ { "name": "hogehoge", }, { "name": "hogeeee", }, ] }
コードはザックリ簡略化しています。
usernameの値によって、値を変える的なコードです
PR出したら「ローカルでしか動かないモックだけどハードコーディングすんな」とのことだったので、db.jsonに値を追加して、ゴニョゴニョする。と・・・。いや面倒くさいん
修正方針
db.jsonに値を追加して、(リクエスト者が持っている、ユーザーリストを参照して、値があったら値を返して、)db.jsonに該当するユーザーの値がなかったら、デフォルトの値を返す
修正後
server.js
const router = jsonServer.router('db.json') server.get('/api/check', (req, res) => { const p = { registered: false, expired: false, } const list = router.db .get('list') .find((o) => o.name === req.query.username) .value() if (list) { p.registered = list.registered p.expired = list.expired } res.jsonp(p) })
db.json
{ "list": [ { "name": "hogehoge", "registered": "true", "expired": "false", }, { "name": "hogeeee", "registered": "true", "expired": "true", }, ] }
ざっくり、こんな感じ。
router.db.get('list’) で、db.jsonの中からlistを取得し、あとはいつも通りfindで絞り込んで、代入する。もしdb.jsonの中身を、不要な値は入れないようにした場合は、存在チェックを入れる
ディスカッション
コメント一覧
まだ、コメントがありません