diff options
-rw-r--r-- | share/server/main.js | 15 | ||||
-rw-r--r-- | share/www/script/couch_tests.js | 20 | ||||
-rw-r--r-- | 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 <ul>"}; + return "HTML <ul>"; } else if (row) { - return {body : '\n<li>Key: ' - +row.key+' Value: '+row.value+'</li>'}; + return '\n<li>Key: ' + +row.key+' Value: '+row.value+'</li>'; } else { // tail - return {body : "</ul>"}; + return "</ul>"; } }, xml : function() { if (head) { - return {body:'<feed xmlns="http://www.w3.org/2005/Atom">' - +'<title>Test XML Feed</title>'}; + return '<feed xmlns="http://www.w3.org/2005/Atom">' + +'<title>Test XML Feed</title>'; } 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 : "</feed>"}; + return "</feed>"; } } }) 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}) -> |