mirror of
https://github.com/typicode/json-server.git
synced 2025-08-01 09:13:32 +08:00
Add prettier
This commit is contained in:
@ -10,26 +10,32 @@ module.exports = (db, name, opts) => {
|
||||
const router = express.Router()
|
||||
|
||||
// Embed function used in GET /name and GET /name/id
|
||||
function embed (resource, e) {
|
||||
e && [].concat(e)
|
||||
.forEach((externalResource) => {
|
||||
function embed(resource, e) {
|
||||
e &&
|
||||
[].concat(e).forEach(externalResource => {
|
||||
if (db.get(externalResource).value) {
|
||||
const query = {}
|
||||
const singularResource = pluralize.singular(name)
|
||||
query[`${singularResource}${opts.foreignKeySuffix}`] = resource.id
|
||||
resource[externalResource] = db.get(externalResource).filter(query).value()
|
||||
resource[externalResource] = db
|
||||
.get(externalResource)
|
||||
.filter(query)
|
||||
.value()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Expand function used in GET /name and GET /name/id
|
||||
function expand (resource, e) {
|
||||
e && [].concat(e)
|
||||
.forEach((innerResource) => {
|
||||
function expand(resource, e) {
|
||||
e &&
|
||||
[].concat(e).forEach(innerResource => {
|
||||
const plural = pluralize(innerResource)
|
||||
if (db.get(plural).value()) {
|
||||
const prop = `${innerResource}${opts.foreignKeySuffix}`
|
||||
resource[innerResource] = db.get(plural).getById(resource[prop]).value()
|
||||
resource[innerResource] = db
|
||||
.get(plural)
|
||||
.getById(resource[prop])
|
||||
.value()
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -40,7 +46,7 @@ module.exports = (db, name, opts) => {
|
||||
// GET /name?_end=&
|
||||
// GET /name?_start=&_end=&
|
||||
// GET /name?_embed=&_expand=
|
||||
function list (req, res, next) {
|
||||
function list(req, res, next) {
|
||||
// Resource chain
|
||||
let chain = db.get(name)
|
||||
|
||||
@ -66,7 +72,7 @@ module.exports = (db, name, opts) => {
|
||||
|
||||
// Automatically delete query parameters that can't be found
|
||||
// in the database
|
||||
Object.keys(req.query).forEach((query) => {
|
||||
Object.keys(req.query).forEach(query => {
|
||||
const arr = db.get(name).value()
|
||||
for (let i in arr) {
|
||||
if (
|
||||
@ -77,7 +83,8 @@ module.exports = (db, name, opts) => {
|
||||
/_gte$/.test(query) ||
|
||||
/_ne$/.test(query) ||
|
||||
/_like$/.test(query)
|
||||
) return
|
||||
)
|
||||
return
|
||||
}
|
||||
delete req.query[query]
|
||||
})
|
||||
@ -90,7 +97,7 @@ module.exports = (db, name, opts) => {
|
||||
|
||||
q = q.toLowerCase()
|
||||
|
||||
chain = chain.filter((obj) => {
|
||||
chain = chain.filter(obj => {
|
||||
for (let key in obj) {
|
||||
const value = obj[key]
|
||||
if (db._.deepQuery(value, q)) {
|
||||
@ -100,16 +107,16 @@ module.exports = (db, name, opts) => {
|
||||
})
|
||||
}
|
||||
|
||||
Object.keys(req.query).forEach((key) => {
|
||||
Object.keys(req.query).forEach(key => {
|
||||
// Don't take into account JSONP query parameters
|
||||
// jQuery adds a '_' query parameter too
|
||||
if (key !== 'callback' && key !== '_') {
|
||||
// Always use an array, in case req.query is an array
|
||||
const arr = [].concat(req.query[key])
|
||||
|
||||
chain = chain.filter((element) => {
|
||||
chain = chain.filter(element => {
|
||||
return arr
|
||||
.map(function (value) {
|
||||
.map(function(value) {
|
||||
const isDifferent = /_ne$/.test(key)
|
||||
const isRange = /_lte$/.test(key) || /_gte$/.test(key)
|
||||
const isLike = /_like$/.test(key)
|
||||
@ -152,7 +159,10 @@ module.exports = (db, name, opts) => {
|
||||
// Slice result
|
||||
if (_end || _limit || _page) {
|
||||
res.setHeader('X-Total-Count', chain.size())
|
||||
res.setHeader('Access-Control-Expose-Headers', 'X-Total-Count' + (_page ? ', Link' : ''))
|
||||
res.setHeader(
|
||||
'Access-Control-Expose-Headers',
|
||||
'X-Total-Count' + (_page ? ', Link' : '')
|
||||
)
|
||||
}
|
||||
|
||||
if (_page) {
|
||||
@ -164,19 +174,31 @@ module.exports = (db, name, opts) => {
|
||||
const fullURL = getFullURL(req)
|
||||
|
||||
if (page.first) {
|
||||
links.first = fullURL.replace('page=' + page.current, 'page=' + page.first)
|
||||
links.first = fullURL.replace(
|
||||
'page=' + page.current,
|
||||
'page=' + page.first
|
||||
)
|
||||
}
|
||||
|
||||
if (page.prev) {
|
||||
links.prev = fullURL.replace('page=' + page.current, 'page=' + page.prev)
|
||||
links.prev = fullURL.replace(
|
||||
'page=' + page.current,
|
||||
'page=' + page.prev
|
||||
)
|
||||
}
|
||||
|
||||
if (page.next) {
|
||||
links.next = fullURL.replace('page=' + page.current, 'page=' + page.next)
|
||||
links.next = fullURL.replace(
|
||||
'page=' + page.current,
|
||||
'page=' + page.next
|
||||
)
|
||||
}
|
||||
|
||||
if (page.last) {
|
||||
links.last = fullURL.replace('page=' + page.current, 'page=' + page.last)
|
||||
links.last = fullURL.replace(
|
||||
'page=' + page.current,
|
||||
'page=' + page.last
|
||||
)
|
||||
}
|
||||
|
||||
res.links(links)
|
||||
@ -192,12 +214,10 @@ module.exports = (db, name, opts) => {
|
||||
}
|
||||
|
||||
// embed and expand
|
||||
chain = chain
|
||||
.cloneDeep()
|
||||
.forEach(function (element) {
|
||||
embed(element, _embed)
|
||||
expand(element, _expand)
|
||||
})
|
||||
chain = chain.cloneDeep().forEach(function(element) {
|
||||
embed(element, _embed)
|
||||
expand(element, _expand)
|
||||
})
|
||||
|
||||
res.locals.data = chain.value()
|
||||
next()
|
||||
@ -205,12 +225,10 @@ module.exports = (db, name, opts) => {
|
||||
|
||||
// GET /name/:id
|
||||
// GET /name/:id?_embed=&_expand
|
||||
function show (req, res, next) {
|
||||
function show(req, res, next) {
|
||||
const _embed = req.query._embed
|
||||
const _expand = req.query._expand
|
||||
const resource = db.get(name)
|
||||
.getById(req.params.id)
|
||||
.value()
|
||||
const resource = db.get(name).getById(req.params.id).value()
|
||||
|
||||
if (resource) {
|
||||
// Clone resource to avoid making changes to the underlying object
|
||||
@ -231,11 +249,8 @@ module.exports = (db, name, opts) => {
|
||||
}
|
||||
|
||||
// POST /name
|
||||
function create (req, res, next) {
|
||||
const resource = db
|
||||
.get(name)
|
||||
.insert(req.body)
|
||||
.value()
|
||||
function create(req, res, next) {
|
||||
const resource = db.get(name).insert(req.body).value()
|
||||
|
||||
res.setHeader('Access-Control-Expose-Headers', 'Location')
|
||||
res.location(`${getFullURL(req)}/${resource.id}`)
|
||||
@ -248,13 +263,14 @@ module.exports = (db, name, opts) => {
|
||||
|
||||
// PUT /name/:id
|
||||
// PATCH /name/:id
|
||||
function update (req, res, next) {
|
||||
function update(req, res, next) {
|
||||
const id = req.params.id
|
||||
let chain = db.get(name)
|
||||
|
||||
chain = req.method === 'PATCH'
|
||||
? chain.updateById(id, req.body)
|
||||
: chain.replaceById(id, req.body)
|
||||
chain =
|
||||
req.method === 'PATCH'
|
||||
? chain.updateById(id, req.body)
|
||||
: chain.replaceById(id, req.body)
|
||||
|
||||
const resource = chain.value()
|
||||
|
||||
@ -266,19 +282,15 @@ module.exports = (db, name, opts) => {
|
||||
}
|
||||
|
||||
// DELETE /name/:id
|
||||
function destroy (req, res, next) {
|
||||
const resource = db.get(name)
|
||||
.removeById(req.params.id)
|
||||
.value()
|
||||
function destroy(req, res, next) {
|
||||
const resource = db.get(name).removeById(req.params.id).value()
|
||||
|
||||
// Remove dependents documents
|
||||
console.log({opts})
|
||||
console.log({ opts })
|
||||
const removable = db._.getRemovable(db.getState(), opts)
|
||||
console.log(removable)
|
||||
removable.forEach((item) => {
|
||||
db.get(item.name)
|
||||
.removeById(item.id)
|
||||
.value()
|
||||
removable.forEach(item => {
|
||||
db.get(item.name).removeById(item.id).value()
|
||||
})
|
||||
|
||||
if (resource) {
|
||||
@ -290,11 +302,10 @@ module.exports = (db, name, opts) => {
|
||||
|
||||
const w = write(db)
|
||||
|
||||
router.route('/')
|
||||
.get(list)
|
||||
.post(create, w)
|
||||
router.route('/').get(list).post(create, w)
|
||||
|
||||
router.route('/:id')
|
||||
router
|
||||
.route('/:id')
|
||||
.get(show)
|
||||
.put(update, w)
|
||||
.patch(update, w)
|
||||
|
Reference in New Issue
Block a user