mirror of
https://github.com/typicode/json-server.git
synced 2025-08-01 09:13:32 +08:00
Add option to singular routes
This commit is contained in:
59
__tests__/server/singular-fake.js
Normal file
59
__tests__/server/singular-fake.js
Normal file
@ -0,0 +1,59 @@
|
||||
const assert = require('assert')
|
||||
const request = require('supertest')
|
||||
const jsonServer = require('../../src/server')
|
||||
|
||||
describe('Fake server', () => {
|
||||
let server
|
||||
let router
|
||||
let db
|
||||
|
||||
beforeEach(() => {
|
||||
db = {}
|
||||
|
||||
db.user = {
|
||||
name: 'foo',
|
||||
email: 'foo@example.com'
|
||||
}
|
||||
|
||||
server = jsonServer.create()
|
||||
router = jsonServer.router(db, { _isFake: true })
|
||||
server.use(jsonServer.defaults())
|
||||
server.use(router)
|
||||
})
|
||||
|
||||
describe('POST /:resource', () => {
|
||||
test('should not create resource', async () => {
|
||||
const user = { name: 'bar' }
|
||||
await request(server)
|
||||
.post('/user')
|
||||
.send(user)
|
||||
.expect(user)
|
||||
.expect(201)
|
||||
assert.notDeepStrictEqual(db.user, user)
|
||||
})
|
||||
})
|
||||
|
||||
describe('PUT /:resource', () => {
|
||||
test('should not update resource', async () => {
|
||||
const user = { name: 'bar' }
|
||||
await request(server)
|
||||
.put('/user')
|
||||
.send(user)
|
||||
.expect(user)
|
||||
.expect(200)
|
||||
assert.notDeepStrictEqual(db.user, user)
|
||||
})
|
||||
})
|
||||
|
||||
describe('PATCH /:resource', () => {
|
||||
test('should not update resource', async () => {
|
||||
const user = { name: 'bar' }
|
||||
await request(server)
|
||||
.patch('/user')
|
||||
.send(user)
|
||||
.expect({ name: 'bar', email: 'foo@example.com' })
|
||||
.expect(200)
|
||||
assert.notDeepStrictEqual(db.user, user)
|
||||
})
|
||||
})
|
||||
})
|
@ -53,7 +53,7 @@ module.exports = (db, opts = { foreignKeySuffix: 'Id', _isFake: false }) => {
|
||||
// Create routes
|
||||
db.forEach((value, key) => {
|
||||
if (_.isPlainObject(value)) {
|
||||
router.use(`/${key}`, singular(db, key))
|
||||
router.use(`/${key}`, singular(db, key, opts))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@ const write = require('./write')
|
||||
const getFullURL = require('./get-full-url')
|
||||
const delay = require('./delay')
|
||||
|
||||
module.exports = (db, name) => {
|
||||
module.exports = (db, name, opts) => {
|
||||
const router = express.Router()
|
||||
router.use(delay)
|
||||
|
||||
@ -13,8 +13,12 @@ module.exports = (db, name) => {
|
||||
}
|
||||
|
||||
function create(req, res, next) {
|
||||
if (opts._isFake) {
|
||||
res.locals.data = req.body
|
||||
} else {
|
||||
db.set(name, req.body).value()
|
||||
res.locals.data = db.get(name).value()
|
||||
}
|
||||
|
||||
res.setHeader('Access-Control-Expose-Headers', 'Location')
|
||||
res.location(`${getFullURL(req)}`)
|
||||
@ -24,6 +28,14 @@ module.exports = (db, name) => {
|
||||
}
|
||||
|
||||
function update(req, res, next) {
|
||||
if (opts._isFake) {
|
||||
if (req.method === 'PUT') {
|
||||
res.locals.data = req.body
|
||||
} else {
|
||||
const resource = db.get(name).value()
|
||||
res.locals.data = { ...resource, ...req.body }
|
||||
}
|
||||
} else {
|
||||
if (req.method === 'PUT') {
|
||||
db.set(name, req.body).value()
|
||||
} else {
|
||||
@ -33,6 +45,8 @@ module.exports = (db, name) => {
|
||||
}
|
||||
|
||||
res.locals.data = db.get(name).value()
|
||||
}
|
||||
|
||||
next()
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user