From 9b83ec394c830ce4f01fa693179c01826859b6e0 Mon Sep 17 00:00:00 2001 From: John Christopher Anderson Date: Sat, 24 Jan 2009 05:17:50 +0000 Subject: Improve show/list API and send external responses without chunked as it's not needed. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@737304 13f79535-47bb-0310-9956-ffa450edef68 --- share/server/main.js | 15 ++++++++++++--- share/www/script/couch_tests.js | 20 ++++++++++++-------- src/couchdb/couch_httpd_external.erl | 4 +--- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/share/server/main.js b/share/server/main.js index d2b9b7e0..8e1f91cd 100644 --- a/share/server/main.js +++ b/share/server/main.js @@ -147,7 +147,7 @@ respondWith = function(req, responders) { var bestKey = keysByMime[bestMime]; var rFunc = responders[bestKey]; if (rFunc) { - var resp = rFunc(); + var resp = maybeWrapResponse(rFunc()); resp["headers"] = resp["headers"] || {}; resp["headers"]["Content-Type"] = bestMime; return resp; @@ -369,10 +369,19 @@ while (cmd = eval(readline())) { } } +function maybeWrapResponse(resp) { + var type = typeof resp; + if ((type == "string") || (type == "xml")) { + return {body:resp}; + } else { + return resp; + } +}; + function runRenderFunction(renderFun, args) { try { - var result = renderFun.apply(null, args); - respond(result); + var resp = renderFun.apply(null, args); + respond(maybeWrapResponse(resp)); } catch(e) { log("function raised error: "+e.toString()); log("stacktrace: "+e.stack); diff --git a/share/www/script/couch_tests.js b/share/www/script/couch_tests.js index 9fea3be7..c87e01a5 100644 --- a/share/www/script/couch_tests.js +++ b/share/www/script/couch_tests.js @@ -2610,19 +2610,21 @@ var tests = { acceptSwitch: stringFun(function(head, row, req) { return respondWith(req, { html : function() { + // If you're outputting text and you're not setting + // any headers, you can just return a string. if (head) { - return {body : "HTML "; } }, xml : function() { if (head) { - return {body:'' - +'Test XML Feed'}; + return '' + +'Test XML Feed'; } else if (row) { // Becase Safari can't stand to see that dastardly // E4X outside of a string. Outside of tests you @@ -2631,9 +2633,11 @@ var tests = { entry.id = row.id; entry.title = row.key; entry.content = row.value; - return {body:entry}; + // We'll also let you return just an E4X object + // if you aren't setting headers. + return entry; } else { - return {body : ""}; + return ""; } } }) diff --git a/src/couchdb/couch_httpd_external.erl b/src/couchdb/couch_httpd_external.erl index 692044ba..5f63ac0e 100644 --- a/src/couchdb/couch_httpd_external.erl +++ b/src/couchdb/couch_httpd_external.erl @@ -96,9 +96,7 @@ send_external_response(#httpd{mochi_req=MochiReq}, Response) -> headers = Headers } = parse_external_response(Response), Resp = MochiReq:respond({Code, - default_or_content_type(CType, Headers), chunked}), - Resp:write_chunk(Data), - Resp:write_chunk(""), + default_or_content_type(CType, Headers), Data}), {ok, Resp}. parse_external_response({Response}) -> -- cgit v1.2.3