summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/server/main.js15
-rw-r--r--share/www/script/couch_tests.js20
-rw-r--r--src/couchdb/couch_httpd_external.erl4
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}) ->