diff --git a/README.md b/README.md index b1ebfaa..d4eda84 100644 --- a/README.md +++ b/README.md @@ -364,6 +364,9 @@ server.get('/echo', function (req, res) { res.jsonp(req.query) }) +// To handle POST, PUT and PATCH you need to use a body-parser +// You can use the one used by JSON Server +server.use(jsonServer.bodyParser) server.use(function (req, res, next) { if (req.method === 'POST') { req.body.createdAt = Date.now() diff --git a/src/server/body-parser.js b/src/server/body-parser.js new file mode 100644 index 0000000..bc95924 --- /dev/null +++ b/src/server/body-parser.js @@ -0,0 +1,6 @@ +var bodyParser = require('body-parser') + +module.exports = [ + bodyParser.json({limit: '10mb', extended: false}), + bodyParser.urlencoded({extended: false}) +] diff --git a/src/server/common.js b/src/server/common.js deleted file mode 100644 index 26577f0..0000000 --- a/src/server/common.js +++ /dev/null @@ -1,9 +0,0 @@ -var bodyParser = require('body-parser') -var methodOverride = require('method-override') - -// common middlewares used in ./defaults.js and ./router/index.js -module.exports = [ - bodyParser.json({limit: '10mb', extended: false}), - bodyParser.urlencoded({extended: false}), - methodOverride() -] diff --git a/src/server/defaults.js b/src/server/defaults.js index 6cbd606..cedd843 100644 --- a/src/server/defaults.js +++ b/src/server/defaults.js @@ -6,7 +6,6 @@ var cors = require('cors') var compression = require('compression') var errorhandler = require('errorhandler') var objectAssign = require('object-assign') -var common = require('./common') module.exports = function (opts) { var userDir = path.join(process.cwd(), 'public') @@ -67,5 +66,5 @@ module.exports = function (opts) { }) } - return arr.concat(common) + return arr } diff --git a/src/server/index.js b/src/server/index.js index 9a74caf..ffc8418 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -8,5 +8,6 @@ module.exports = { }, defaults: require('./defaults'), router: require('./router'), - rewriter: require('./rewriter') + rewriter: require('./rewriter'), + bodyParser: require('./body-parser') } diff --git a/src/server/router/index.js b/src/server/router/index.js index 481d00a..e103c52 100644 --- a/src/server/router/index.js +++ b/src/server/router/index.js @@ -1,20 +1,22 @@ var express = require('express') +var methodOverride = require('method-override') var _ = require('lodash') var _db = require('underscore-db') var low = require('lowdb') var fileAsync = require('lowdb/lib/file-async') +var bodyParser = require('../body-parser') var plural = require('./plural') var nested = require('./nested') var singular = require('./singular') var mixins = require('../mixins') -var common = require('../common') module.exports = function (source) { // Create router var router = express.Router() // Add middlewares - router.use(common) + router.use(methodOverride()) + router.use(bodyParser) // Create database var db diff --git a/src/server/utils.js b/src/server/utils.js index 179f005..8f8307a 100644 --- a/src/server/utils.js +++ b/src/server/utils.js @@ -1,7 +1,29 @@ module.exports = { + toNative: toNative, getPage: getPage } +// Turns string to native. +// Example: +// 'true' -> true +// '1' -> 1 +function toNative (value) { + if (typeof value === 'string') { + if ( + value === '' || + value.trim() !== value || + (value.length > 1 && value[0] === '0') + ) { + return value + } else if (value === 'true' || value === 'false') { + return value === 'true' + } else if (!isNaN(+value)) { + return +value + } + } + return value +} + function getPage (array, page, perPage) { var obj = {} var start = (page - 1) * perPage