diff options
| author | Sean Fridman <fridman@mail.sfsu.edu> | 2015-04-08 23:43:35 -0400 |
|---|---|---|
| committer | Sean Fridman <fridman@mail.sfsu.edu> | 2015-04-08 23:44:17 -0400 |
| commit | 62ee0595346e5254c10083e43346be40dbb96d70 (patch) | |
| tree | 8c70d1256edcf64c844af702296a7c5f1252716f /app/node_modules/okadminview/index.js | |
| parent | f8f9c515cd9c413323f64692fd0528877a8fceed (diff) | |
Properly handle and display form errors
Diffstat (limited to 'app/node_modules/okadminview/index.js')
| -rw-r--r-- | app/node_modules/okadminview/index.js | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/app/node_modules/okadminview/index.js b/app/node_modules/okadminview/index.js index 1dcc0d6..8b17995 100644 --- a/app/node_modules/okadminview/index.js +++ b/app/node_modules/okadminview/index.js @@ -1,3 +1,4 @@ +var assign = require('object-assign') var bodyParser = require('body-parser'); var methodOverride = require('method-override'); var Q = require('q'); @@ -108,7 +109,6 @@ function OKAdminView(options) { } }); - router.get('/:type/:id/', function readResource(req, res, next) { var type = req.params.type || ''; var id = req.params.id || ''; @@ -120,7 +120,7 @@ function OKAdminView(options) { resource: resource, query: id }); - fetchResourceTemplateData(meta, query, transform).then(function(data) { + fetchResourceTemplateData(meta, query, getResourceTemplateData).then(function(data) { if (!data) { resourceMissingHandler(req, res)() } else { @@ -129,25 +129,6 @@ function OKAdminView(options) { }).fail(errorHandler(req, res)); } - function transform(meta, resource, data) { - meta = meta || {}; - resource = resource || {}; - data = data || {}; - var spec = Object.keys(resource.spec).reduce(function(cache, prop) { - var propSpec = resource.spec[prop]; - var value = data[prop]; - cache[prop].id = data[resource.idField]; - cache[prop].value = value; - return cache; - }, resource.spec); - return { - meta: meta, - resource: { - type: resource.type, - spec: spec - } - }; - } }); router.post('/:type/', function createResource(req, res, next) { @@ -158,21 +139,14 @@ function OKAdminView(options) { errorHandler(req, res)(new Error('No such resource ' + type)); } else { meta.get().then(function(metadata) { - var templateData = { - meta: metadata, - resource: { - type: resource.type, - spec: resource.spec, - data: data - } - }; try { resource.assertValid(data); resource.create(data).then(function(created) { res.redirect(303, data[resource.idField]); }).fail(errorHandler(req, res)); } catch (errors) { - view.renderResource(req, res, templateData); + var templateData = getResourceTemplateData(metadata, resource, data); + view.renderResource(req, res, assign(templateData, {errors: errors})); } }).fail(errorHandler(req, res));; } @@ -188,20 +162,14 @@ function OKAdminView(options) { } else { // TODO Prob should make metadata synchronous... meta.get().then(function(metadata) { - var templateData = { - meta: metadata, - resource: { - spec: resource.spec, - data: data - } - }; try { resource.assertValid(data); resource.update(id, data).then(function(updated) { res.redirect(303, '../' + updated[resource.idField]); }).fail(errorHandler(req, res)); } catch (errors) { - view.renderResource(req, res, templateData); + var templateData = getResourceTemplateData(metadata, resource, data); + view.renderResource(req, res, assign(templateData, {errors: errors})); } }).fail(errorHandler(req, res)); } @@ -211,6 +179,29 @@ function OKAdminView(options) { } } +/** + * Get template data for a single resource + */ +function getResourceTemplateData(meta, resource, data) { + meta = meta || {}; + resource = resource || {}; + data = data || {}; + var spec = Object.keys(resource.spec).reduce(function(cache, prop) { + var propSpec = resource.spec[prop]; + var value = data[prop]; + cache[prop].id = data[resource.idField]; + cache[prop].value = value; + return cache; + }, resource.spec); + return { + meta: meta, + resource: { + type: resource.type, + spec: spec + } + }; +} + OKAdminView.prototype.middleware = function() { return this._middleware; }; |
