From 36bbc72b6b0992639a0ba7a2077d75ec9f7cf03d Mon Sep 17 00:00:00 2001 From: John Christopher Anderson Date: Tue, 11 Aug 2009 18:50:08 +0000 Subject: Initial commit of _update handler. Thanks to Paul Davis, Jason Davies for code and others for discussion. The _update handler accepts POSTs to paths like: /db/_design/foo/_update/bar and PUTs which include docids, like: /db/_design/foo/_update/bar/docid The function signature: function(doc, req) { doc.a_new_field = req.query.something; return [doc, "

added something to your doc

"]; } The tests in update_documents.js are fairly complete and include examples of bumping a counter, changing only a single field, parsing from (and returning) XML, and creating new documents. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@803245 13f79535-47bb-0310-9956-ffa450edef68 --- share/server/render.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'share/server/render.js') diff --git a/share/server/render.js b/share/server/render.js index 1a9fc5a5..82ceb3ab 100644 --- a/share/server/render.js +++ b/share/server/render.js @@ -166,11 +166,16 @@ function runProvides(req) { //// //// //// + var Render = { show : function(funSrc, doc, req) { var showFun = compileFunction(funSrc); runShow(showFun, doc, req, funSrc); }, + update : function(funSrc, doc, req) { + var upFun = compileFunction(funSrc); + runUpdate(upFun, doc, req, funSrc); + }, list : function(head, req) { runList(funs[0], head, req, funsrc[0]); } @@ -212,6 +217,21 @@ function runShow(showFun, doc, req, funSrc) { } }; +function runUpdate(renderFun, doc, req, funSrc) { + try { + var result = renderFun.apply(null, [doc, req]); + var doc = result[0]; + var resp = result[1]; + if (resp) { + respond(["up", doc, maybeWrapResponse(resp)]); + } else { + renderError("undefined response from update function"); + } + } catch(e) { + respondError(e, funSrc, true); + } +}; + function resetList() { gotRow = false; lastRow = false; -- cgit v1.2.3