UNPKG

ae-biu

Version:

Born For AE, Born To Do

82 lines (65 loc) 1.94 kB
import jsonServer from 'json-server' import fs from 'fs' import path from 'path' import { parse } from 'filter-string' import { mockDir } from '../utils/paths' import logger from '../utils/logger' const createServer = () => { // server const server = jsonServer.create() // db path const dbPath = path.resolve(mockDir, 'db.json') if (!fs.existsSync(dbPath)) { logger.error('No db.json found in project, please see docs\n') process.exit(1) } const router = jsonServer.router(dbPath) const middlewares = jsonServer.defaults() // transform req query, such as $offset -> _page, $limit -> _limit const reqTransformMiddleware = (req, res, next) => { // $limit if (req.query.$limit) { req.query._limit = req.query.$limit } // $offset if (req.query.$offset) { const limit = req.query._limit || 10 // req.query['_page'] = Math.floor(req.query['$offset'] / limit) + 1 req.query._start = req.query.$offset req.query._limit = limit } // ops const filters = parse(req.query.$filter) filters.forEach(({ key, op, value }) => { if (op === 'like') { req.query[`${key}_like`] = value } if (op === 'gt' || op === 'ge' || op === 'le' || op === 'lt') { req.query[`${key}_${op[0] + 'te'}`] = value } if (op === 'ne') { req.query[`${key}_ne`] = value } if (op === 'eq') { req.query[key] = value } }) // sort, only support one field if (req.query.$orderby) { const orderby = req.query.$orderby const key = orderby.split(' ')[0] const order = orderby.split(' ') || 'asc' req.query._sort = key req.query._order = order } next() } // apply transform server.use(reqTransformMiddleware) // apply defaults server.use(middlewares) // apply router server.use(router) return server } export default createServer