You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@couchdb.apache.org by Samuel Wan <sa...@samuelwan.com> on 2009/04/21 21:28:49 UTC

specify Content-Type of a document?

Is it possible to specify the Content-Type header of a document? Do
you need to use a "show" function?

-Sam

Re: specify Content-Type of a document?

Posted by Paul Davis <pa...@gmail.com>.
It passes my less than expert filter. I'll bug Chris to glance at it too.

Thanks for adding to the wiki.

Paul Davis

On Wed, Apr 22, 2009 at 1:51 AM, Samuel Wan <sa...@samuelwan.com> wrote:
> Ok, I've added two sections to the "show and list" page:
>
> http://wiki.apache.org/couchdb/Formatting_with_Show_and_List
>
> Again, I'm new to couchdb and really just walking through the source,
> so an expert might want to review for accuracy.
>
> -Sam
>
> On Tue, Apr 21, 2009 at 2:41 PM, Paul Davis <pa...@gmail.com> wrote:
>> On Tue, Apr 21, 2009 at 5:36 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>> Ok, thanks for the confirmation.
>>>
>>> That was an interesting trip through the code. CouchDB is absolutely
>>> blowing my mind :-)
>>>
>>
>> Yeah, one thing we have to work more on is documentation. Though the
>> test suite helps. Also, while thinking about it you might want to
>> check the wiki to see if you can add or update a page while you've got
>> it in your head.
>>
>> Thanks,
>> Paul Davis
>>
>>> -Sam
>>>
>>> On Tue, Apr 21, 2009 at 2:23 PM, Paul Davis <pa...@gmail.com> wrote:
>>>> On Tue, Apr 21, 2009 at 4:56 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>> Thanks a lot for the pointer, Paul, it would have taken a long time to
>>>>> find otherwise. So lemme see if I got it right...
>>>>>
>>>>> The manual approach is to specify the content type as a member of the
>>>>> _show function's response object:
>>>>>
>>>>> - - - - - - -
>>>>>  return {
>>>>>           "headers" : {
>>>>>             "Content-Type" : "application/xml"
>>>>>           },
>>>>>           "body" : new XML('<xml><node foo="bar"/></xml>')
>>>>>         }
>>>>> - - - - - - -
>>>>>
>>>>> The convenient approach is to use some global variables and helper
>>>>> methods defined by CouchDB's <couchdb>/server/main.js file. One of
>>>>> these methods is registerType, which lets you register a type key with
>>>>> one or more MIME type strings.
>>>>>
>>>>> - - - - - - -
>>>>> registerType("foo", "application/foo", "application/x-foo"); //<--
>>>>> stored to some global associative array defined by main.js
>>>>> - - - - - - -
>>>>>
>>>>> The other helper method is respondsWith, which accepts a second
>>>>> argument (a key-value object) that maps type keys to functions that
>>>>> return different kinds of HTTP responses depending on the type.
>>>>>
>>>>
>>>> That sounds pretty much right. I'll tell Chris to double check when he
>>>> gets back.
>>>>
>>>>> - - - - - - -
>>>>> return respondWith(req, {
>>>>>          html : function() {
>>>>>            return {
>>>>>              body:"Ha ha, you said \"" + doc.word + "\"."
>>>>>            };
>>>>>          },
>>>>>          foo : function() {
>>>>>            return {
>>>>>              body: "foofoo"
>>>>>            };
>>>>>          },
>>>>>          fallback : "html"
>>>>>        });
>>>>> - - - - - - -
>>>>>
>>>>> So respondWith helper makes it easier for a show function respond to
>>>>> different Content-Type request headers... i think... Since there's a
>>>>> test for it, I guess content-type handling in the server-side JS is
>>>>> something CouchDB intends to support moving forward...
>>>>>
>>>>
>>>> Yep, they're features that CouchDB is comitted to keeping.
>>>>
>>>>
>>>> Paul Davis
>>>>
>>>>> -Sam
>>>>>
>>>>>
>>>>> On Tue, Apr 21, 2009 at 12:57 PM, Paul Davis
>>>>> <pa...@gmail.com> wrote:
>>>>>> Sam,
>>>>>>
>>>>>> This sounds very much like you want a _show function. Both _show and
>>>>>> _list can specify the content-type returned to the client. You'll want
>>>>>> to check the test suite code and look for the respondWith stuff for
>>>>>> examples.
>>>>>>
>>>>>> HTH,
>>>>>> Paul Davis
>>>>>>
>>>>>> On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>>>> I'm trying to build a simple learning experiment where I can write
>>>>>>> HTML and Javascript into documents, and retrieve them with a GET
>>>>>>> request. However, I don't know how to specify text/html or
>>>>>>> application/x-javascript as the Content-Type headers in the response
>>>>>>> to a document request.
>>>>>>>
>>>>>>> Is the recommended practice to simply store the html or js text as
>>>>>>> attachments, or is it possible somehow to use a "show" function to
>>>>>>> send them back with specific content type headers? I read some of
>>>>>>> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
>>>>>>> at the CouchApp code, but it might be too much to grasp all at once
>>>>>>> for me.
>>>>>>>
>>>>>>> -Sam
>>>>>>>
>>>>>>> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
>>>>>>> <pa...@gmail.com> wrote:
>>>>>>>> Sam,
>>>>>>>>
>>>>>>>> We're consistently inconsistent in that we only sometimes check for
>>>>>>>> the content-type when posting JSON documents. Of the top of my head I
>>>>>>>> know we check in _temp_views but not for PUTs and POSTs to docs or
>>>>>>>> _bulk_docs.
>>>>>>>>
>>>>>>>> If you mean for adding attachments to docs though CouchDB will just
>>>>>>>> send you back the content-type header you attached it with so you can
>>>>>>>> control what clients will see when fetching attachments.
>>>>>>>>
>>>>>>>> HTH,
>>>>>>>> Paul Davis
>>>>>>>>
>>>>>>>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>>>>>> Is it possible to specify the Content-Type header of a document? Do
>>>>>>>>> you need to use a "show" function?
>>>>>>>>>
>>>>>>>>> -Sam
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Samuel Wan <sa...@samuelwan.com>.
Ok, I've added two sections to the "show and list" page:

http://wiki.apache.org/couchdb/Formatting_with_Show_and_List

Again, I'm new to couchdb and really just walking through the source,
so an expert might want to review for accuracy.

-Sam

On Tue, Apr 21, 2009 at 2:41 PM, Paul Davis <pa...@gmail.com> wrote:
> On Tue, Apr 21, 2009 at 5:36 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>> Ok, thanks for the confirmation.
>>
>> That was an interesting trip through the code. CouchDB is absolutely
>> blowing my mind :-)
>>
>
> Yeah, one thing we have to work more on is documentation. Though the
> test suite helps. Also, while thinking about it you might want to
> check the wiki to see if you can add or update a page while you've got
> it in your head.
>
> Thanks,
> Paul Davis
>
>> -Sam
>>
>> On Tue, Apr 21, 2009 at 2:23 PM, Paul Davis <pa...@gmail.com> wrote:
>>> On Tue, Apr 21, 2009 at 4:56 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>> Thanks a lot for the pointer, Paul, it would have taken a long time to
>>>> find otherwise. So lemme see if I got it right...
>>>>
>>>> The manual approach is to specify the content type as a member of the
>>>> _show function's response object:
>>>>
>>>> - - - - - - -
>>>>  return {
>>>>           "headers" : {
>>>>             "Content-Type" : "application/xml"
>>>>           },
>>>>           "body" : new XML('<xml><node foo="bar"/></xml>')
>>>>         }
>>>> - - - - - - -
>>>>
>>>> The convenient approach is to use some global variables and helper
>>>> methods defined by CouchDB's <couchdb>/server/main.js file. One of
>>>> these methods is registerType, which lets you register a type key with
>>>> one or more MIME type strings.
>>>>
>>>> - - - - - - -
>>>> registerType("foo", "application/foo", "application/x-foo"); //<--
>>>> stored to some global associative array defined by main.js
>>>> - - - - - - -
>>>>
>>>> The other helper method is respondsWith, which accepts a second
>>>> argument (a key-value object) that maps type keys to functions that
>>>> return different kinds of HTTP responses depending on the type.
>>>>
>>>
>>> That sounds pretty much right. I'll tell Chris to double check when he
>>> gets back.
>>>
>>>> - - - - - - -
>>>> return respondWith(req, {
>>>>          html : function() {
>>>>            return {
>>>>              body:"Ha ha, you said \"" + doc.word + "\"."
>>>>            };
>>>>          },
>>>>          foo : function() {
>>>>            return {
>>>>              body: "foofoo"
>>>>            };
>>>>          },
>>>>          fallback : "html"
>>>>        });
>>>> - - - - - - -
>>>>
>>>> So respondWith helper makes it easier for a show function respond to
>>>> different Content-Type request headers... i think... Since there's a
>>>> test for it, I guess content-type handling in the server-side JS is
>>>> something CouchDB intends to support moving forward...
>>>>
>>>
>>> Yep, they're features that CouchDB is comitted to keeping.
>>>
>>>
>>> Paul Davis
>>>
>>>> -Sam
>>>>
>>>>
>>>> On Tue, Apr 21, 2009 at 12:57 PM, Paul Davis
>>>> <pa...@gmail.com> wrote:
>>>>> Sam,
>>>>>
>>>>> This sounds very much like you want a _show function. Both _show and
>>>>> _list can specify the content-type returned to the client. You'll want
>>>>> to check the test suite code and look for the respondWith stuff for
>>>>> examples.
>>>>>
>>>>> HTH,
>>>>> Paul Davis
>>>>>
>>>>> On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>>> I'm trying to build a simple learning experiment where I can write
>>>>>> HTML and Javascript into documents, and retrieve them with a GET
>>>>>> request. However, I don't know how to specify text/html or
>>>>>> application/x-javascript as the Content-Type headers in the response
>>>>>> to a document request.
>>>>>>
>>>>>> Is the recommended practice to simply store the html or js text as
>>>>>> attachments, or is it possible somehow to use a "show" function to
>>>>>> send them back with specific content type headers? I read some of
>>>>>> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
>>>>>> at the CouchApp code, but it might be too much to grasp all at once
>>>>>> for me.
>>>>>>
>>>>>> -Sam
>>>>>>
>>>>>> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
>>>>>> <pa...@gmail.com> wrote:
>>>>>>> Sam,
>>>>>>>
>>>>>>> We're consistently inconsistent in that we only sometimes check for
>>>>>>> the content-type when posting JSON documents. Of the top of my head I
>>>>>>> know we check in _temp_views but not for PUTs and POSTs to docs or
>>>>>>> _bulk_docs.
>>>>>>>
>>>>>>> If you mean for adding attachments to docs though CouchDB will just
>>>>>>> send you back the content-type header you attached it with so you can
>>>>>>> control what clients will see when fetching attachments.
>>>>>>>
>>>>>>> HTH,
>>>>>>> Paul Davis
>>>>>>>
>>>>>>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>>>>> Is it possible to specify the Content-Type header of a document? Do
>>>>>>>> you need to use a "show" function?
>>>>>>>>
>>>>>>>> -Sam
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Paul Davis <pa...@gmail.com>.
On Tue, Apr 21, 2009 at 5:36 PM, Samuel Wan <sa...@samuelwan.com> wrote:
> Ok, thanks for the confirmation.
>
> That was an interesting trip through the code. CouchDB is absolutely
> blowing my mind :-)
>

Yeah, one thing we have to work more on is documentation. Though the
test suite helps. Also, while thinking about it you might want to
check the wiki to see if you can add or update a page while you've got
it in your head.

Thanks,
Paul Davis

> -Sam
>
> On Tue, Apr 21, 2009 at 2:23 PM, Paul Davis <pa...@gmail.com> wrote:
>> On Tue, Apr 21, 2009 at 4:56 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>> Thanks a lot for the pointer, Paul, it would have taken a long time to
>>> find otherwise. So lemme see if I got it right...
>>>
>>> The manual approach is to specify the content type as a member of the
>>> _show function's response object:
>>>
>>> - - - - - - -
>>>  return {
>>>           "headers" : {
>>>             "Content-Type" : "application/xml"
>>>           },
>>>           "body" : new XML('<xml><node foo="bar"/></xml>')
>>>         }
>>> - - - - - - -
>>>
>>> The convenient approach is to use some global variables and helper
>>> methods defined by CouchDB's <couchdb>/server/main.js file. One of
>>> these methods is registerType, which lets you register a type key with
>>> one or more MIME type strings.
>>>
>>> - - - - - - -
>>> registerType("foo", "application/foo", "application/x-foo"); //<--
>>> stored to some global associative array defined by main.js
>>> - - - - - - -
>>>
>>> The other helper method is respondsWith, which accepts a second
>>> argument (a key-value object) that maps type keys to functions that
>>> return different kinds of HTTP responses depending on the type.
>>>
>>
>> That sounds pretty much right. I'll tell Chris to double check when he
>> gets back.
>>
>>> - - - - - - -
>>> return respondWith(req, {
>>>          html : function() {
>>>            return {
>>>              body:"Ha ha, you said \"" + doc.word + "\"."
>>>            };
>>>          },
>>>          foo : function() {
>>>            return {
>>>              body: "foofoo"
>>>            };
>>>          },
>>>          fallback : "html"
>>>        });
>>> - - - - - - -
>>>
>>> So respondWith helper makes it easier for a show function respond to
>>> different Content-Type request headers... i think... Since there's a
>>> test for it, I guess content-type handling in the server-side JS is
>>> something CouchDB intends to support moving forward...
>>>
>>
>> Yep, they're features that CouchDB is comitted to keeping.
>>
>>
>> Paul Davis
>>
>>> -Sam
>>>
>>>
>>> On Tue, Apr 21, 2009 at 12:57 PM, Paul Davis
>>> <pa...@gmail.com> wrote:
>>>> Sam,
>>>>
>>>> This sounds very much like you want a _show function. Both _show and
>>>> _list can specify the content-type returned to the client. You'll want
>>>> to check the test suite code and look for the respondWith stuff for
>>>> examples.
>>>>
>>>> HTH,
>>>> Paul Davis
>>>>
>>>> On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>> I'm trying to build a simple learning experiment where I can write
>>>>> HTML and Javascript into documents, and retrieve them with a GET
>>>>> request. However, I don't know how to specify text/html or
>>>>> application/x-javascript as the Content-Type headers in the response
>>>>> to a document request.
>>>>>
>>>>> Is the recommended practice to simply store the html or js text as
>>>>> attachments, or is it possible somehow to use a "show" function to
>>>>> send them back with specific content type headers? I read some of
>>>>> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
>>>>> at the CouchApp code, but it might be too much to grasp all at once
>>>>> for me.
>>>>>
>>>>> -Sam
>>>>>
>>>>> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
>>>>> <pa...@gmail.com> wrote:
>>>>>> Sam,
>>>>>>
>>>>>> We're consistently inconsistent in that we only sometimes check for
>>>>>> the content-type when posting JSON documents. Of the top of my head I
>>>>>> know we check in _temp_views but not for PUTs and POSTs to docs or
>>>>>> _bulk_docs.
>>>>>>
>>>>>> If you mean for adding attachments to docs though CouchDB will just
>>>>>> send you back the content-type header you attached it with so you can
>>>>>> control what clients will see when fetching attachments.
>>>>>>
>>>>>> HTH,
>>>>>> Paul Davis
>>>>>>
>>>>>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>>>> Is it possible to specify the Content-Type header of a document? Do
>>>>>>> you need to use a "show" function?
>>>>>>>
>>>>>>> -Sam
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Samuel Wan <sa...@samuelwan.com>.
Ok, thanks for the confirmation.

That was an interesting trip through the code. CouchDB is absolutely
blowing my mind :-)

-Sam

On Tue, Apr 21, 2009 at 2:23 PM, Paul Davis <pa...@gmail.com> wrote:
> On Tue, Apr 21, 2009 at 4:56 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>> Thanks a lot for the pointer, Paul, it would have taken a long time to
>> find otherwise. So lemme see if I got it right...
>>
>> The manual approach is to specify the content type as a member of the
>> _show function's response object:
>>
>> - - - - - - -
>>  return {
>>           "headers" : {
>>             "Content-Type" : "application/xml"
>>           },
>>           "body" : new XML('<xml><node foo="bar"/></xml>')
>>         }
>> - - - - - - -
>>
>> The convenient approach is to use some global variables and helper
>> methods defined by CouchDB's <couchdb>/server/main.js file. One of
>> these methods is registerType, which lets you register a type key with
>> one or more MIME type strings.
>>
>> - - - - - - -
>> registerType("foo", "application/foo", "application/x-foo"); //<--
>> stored to some global associative array defined by main.js
>> - - - - - - -
>>
>> The other helper method is respondsWith, which accepts a second
>> argument (a key-value object) that maps type keys to functions that
>> return different kinds of HTTP responses depending on the type.
>>
>
> That sounds pretty much right. I'll tell Chris to double check when he
> gets back.
>
>> - - - - - - -
>> return respondWith(req, {
>>          html : function() {
>>            return {
>>              body:"Ha ha, you said \"" + doc.word + "\"."
>>            };
>>          },
>>          foo : function() {
>>            return {
>>              body: "foofoo"
>>            };
>>          },
>>          fallback : "html"
>>        });
>> - - - - - - -
>>
>> So respondWith helper makes it easier for a show function respond to
>> different Content-Type request headers... i think... Since there's a
>> test for it, I guess content-type handling in the server-side JS is
>> something CouchDB intends to support moving forward...
>>
>
> Yep, they're features that CouchDB is comitted to keeping.
>
>
> Paul Davis
>
>> -Sam
>>
>>
>> On Tue, Apr 21, 2009 at 12:57 PM, Paul Davis
>> <pa...@gmail.com> wrote:
>>> Sam,
>>>
>>> This sounds very much like you want a _show function. Both _show and
>>> _list can specify the content-type returned to the client. You'll want
>>> to check the test suite code and look for the respondWith stuff for
>>> examples.
>>>
>>> HTH,
>>> Paul Davis
>>>
>>> On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>> I'm trying to build a simple learning experiment where I can write
>>>> HTML and Javascript into documents, and retrieve them with a GET
>>>> request. However, I don't know how to specify text/html or
>>>> application/x-javascript as the Content-Type headers in the response
>>>> to a document request.
>>>>
>>>> Is the recommended practice to simply store the html or js text as
>>>> attachments, or is it possible somehow to use a "show" function to
>>>> send them back with specific content type headers? I read some of
>>>> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
>>>> at the CouchApp code, but it might be too much to grasp all at once
>>>> for me.
>>>>
>>>> -Sam
>>>>
>>>> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
>>>> <pa...@gmail.com> wrote:
>>>>> Sam,
>>>>>
>>>>> We're consistently inconsistent in that we only sometimes check for
>>>>> the content-type when posting JSON documents. Of the top of my head I
>>>>> know we check in _temp_views but not for PUTs and POSTs to docs or
>>>>> _bulk_docs.
>>>>>
>>>>> If you mean for adding attachments to docs though CouchDB will just
>>>>> send you back the content-type header you attached it with so you can
>>>>> control what clients will see when fetching attachments.
>>>>>
>>>>> HTH,
>>>>> Paul Davis
>>>>>
>>>>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>>> Is it possible to specify the Content-Type header of a document? Do
>>>>>> you need to use a "show" function?
>>>>>>
>>>>>> -Sam
>>>>>>
>>>>>
>>>>
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Paul Davis <pa...@gmail.com>.
On Tue, Apr 21, 2009 at 4:56 PM, Samuel Wan <sa...@samuelwan.com> wrote:
> Thanks a lot for the pointer, Paul, it would have taken a long time to
> find otherwise. So lemme see if I got it right...
>
> The manual approach is to specify the content type as a member of the
> _show function's response object:
>
> - - - - - - -
>  return {
>           "headers" : {
>             "Content-Type" : "application/xml"
>           },
>           "body" : new XML('<xml><node foo="bar"/></xml>')
>         }
> - - - - - - -
>
> The convenient approach is to use some global variables and helper
> methods defined by CouchDB's <couchdb>/server/main.js file. One of
> these methods is registerType, which lets you register a type key with
> one or more MIME type strings.
>
> - - - - - - -
> registerType("foo", "application/foo", "application/x-foo"); //<--
> stored to some global associative array defined by main.js
> - - - - - - -
>
> The other helper method is respondsWith, which accepts a second
> argument (a key-value object) that maps type keys to functions that
> return different kinds of HTTP responses depending on the type.
>

That sounds pretty much right. I'll tell Chris to double check when he
gets back.

> - - - - - - -
> return respondWith(req, {
>          html : function() {
>            return {
>              body:"Ha ha, you said \"" + doc.word + "\"."
>            };
>          },
>          foo : function() {
>            return {
>              body: "foofoo"
>            };
>          },
>          fallback : "html"
>        });
> - - - - - - -
>
> So respondWith helper makes it easier for a show function respond to
> different Content-Type request headers... i think... Since there's a
> test for it, I guess content-type handling in the server-side JS is
> something CouchDB intends to support moving forward...
>

Yep, they're features that CouchDB is comitted to keeping.


Paul Davis

> -Sam
>
>
> On Tue, Apr 21, 2009 at 12:57 PM, Paul Davis
> <pa...@gmail.com> wrote:
>> Sam,
>>
>> This sounds very much like you want a _show function. Both _show and
>> _list can specify the content-type returned to the client. You'll want
>> to check the test suite code and look for the respondWith stuff for
>> examples.
>>
>> HTH,
>> Paul Davis
>>
>> On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>> I'm trying to build a simple learning experiment where I can write
>>> HTML and Javascript into documents, and retrieve them with a GET
>>> request. However, I don't know how to specify text/html or
>>> application/x-javascript as the Content-Type headers in the response
>>> to a document request.
>>>
>>> Is the recommended practice to simply store the html or js text as
>>> attachments, or is it possible somehow to use a "show" function to
>>> send them back with specific content type headers? I read some of
>>> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
>>> at the CouchApp code, but it might be too much to grasp all at once
>>> for me.
>>>
>>> -Sam
>>>
>>> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
>>> <pa...@gmail.com> wrote:
>>>> Sam,
>>>>
>>>> We're consistently inconsistent in that we only sometimes check for
>>>> the content-type when posting JSON documents. Of the top of my head I
>>>> know we check in _temp_views but not for PUTs and POSTs to docs or
>>>> _bulk_docs.
>>>>
>>>> If you mean for adding attachments to docs though CouchDB will just
>>>> send you back the content-type header you attached it with so you can
>>>> control what clients will see when fetching attachments.
>>>>
>>>> HTH,
>>>> Paul Davis
>>>>
>>>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>>> Is it possible to specify the Content-Type header of a document? Do
>>>>> you need to use a "show" function?
>>>>>
>>>>> -Sam
>>>>>
>>>>
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Samuel Wan <sa...@samuelwan.com>.
Thanks a lot for the pointer, Paul, it would have taken a long time to
find otherwise. So lemme see if I got it right...

The manual approach is to specify the content type as a member of the
_show function's response object:

- - - - - - -
 return {
           "headers" : {
             "Content-Type" : "application/xml"
           },
           "body" : new XML('<xml><node foo="bar"/></xml>')
         }
- - - - - - -

The convenient approach is to use some global variables and helper
methods defined by CouchDB's <couchdb>/server/main.js file. One of
these methods is registerType, which lets you register a type key with
one or more MIME type strings.

- - - - - - -
registerType("foo", "application/foo", "application/x-foo"); //<--
stored to some global associative array defined by main.js
- - - - - - -

The other helper method is respondsWith, which accepts a second
argument (a key-value object) that maps type keys to functions that
return different kinds of HTTP responses depending on the type.

- - - - - - -
return respondWith(req, {
          html : function() {
            return {
              body:"Ha ha, you said \"" + doc.word + "\"."
            };
          },
          foo : function() {
            return {
              body: "foofoo"
            };
          },
          fallback : "html"
        });
- - - - - - -

So respondWith helper makes it easier for a show function respond to
different Content-Type request headers... i think... Since there's a
test for it, I guess content-type handling in the server-side JS is
something CouchDB intends to support moving forward...

-Sam


On Tue, Apr 21, 2009 at 12:57 PM, Paul Davis
<pa...@gmail.com> wrote:
> Sam,
>
> This sounds very much like you want a _show function. Both _show and
> _list can specify the content-type returned to the client. You'll want
> to check the test suite code and look for the respondWith stuff for
> examples.
>
> HTH,
> Paul Davis
>
> On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>> I'm trying to build a simple learning experiment where I can write
>> HTML and Javascript into documents, and retrieve them with a GET
>> request. However, I don't know how to specify text/html or
>> application/x-javascript as the Content-Type headers in the response
>> to a document request.
>>
>> Is the recommended practice to simply store the html or js text as
>> attachments, or is it possible somehow to use a "show" function to
>> send them back with specific content type headers? I read some of
>> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
>> at the CouchApp code, but it might be too much to grasp all at once
>> for me.
>>
>> -Sam
>>
>> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
>> <pa...@gmail.com> wrote:
>>> Sam,
>>>
>>> We're consistently inconsistent in that we only sometimes check for
>>> the content-type when posting JSON documents. Of the top of my head I
>>> know we check in _temp_views but not for PUTs and POSTs to docs or
>>> _bulk_docs.
>>>
>>> If you mean for adding attachments to docs though CouchDB will just
>>> send you back the content-type header you attached it with so you can
>>> control what clients will see when fetching attachments.
>>>
>>> HTH,
>>> Paul Davis
>>>
>>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>>> Is it possible to specify the Content-Type header of a document? Do
>>>> you need to use a "show" function?
>>>>
>>>> -Sam
>>>>
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Paul Davis <pa...@gmail.com>.
Sam,

This sounds very much like you want a _show function. Both _show and
_list can specify the content-type returned to the client. You'll want
to check the test suite code and look for the respondWith stuff for
examples.

HTH,
Paul Davis

On Tue, Apr 21, 2009 at 3:51 PM, Samuel Wan <sa...@samuelwan.com> wrote:
> I'm trying to build a simple learning experiment where I can write
> HTML and Javascript into documents, and retrieve them with a GET
> request. However, I don't know how to specify text/html or
> application/x-javascript as the Content-Type headers in the response
> to a document request.
>
> Is the recommended practice to simply store the html or js text as
> attachments, or is it possible somehow to use a "show" function to
> send them back with specific content type headers? I read some of
> Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
> at the CouchApp code, but it might be too much to grasp all at once
> for me.
>
> -Sam
>
> On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
> <pa...@gmail.com> wrote:
>> Sam,
>>
>> We're consistently inconsistent in that we only sometimes check for
>> the content-type when posting JSON documents. Of the top of my head I
>> know we check in _temp_views but not for PUTs and POSTs to docs or
>> _bulk_docs.
>>
>> If you mean for adding attachments to docs though CouchDB will just
>> send you back the content-type header you attached it with so you can
>> control what clients will see when fetching attachments.
>>
>> HTH,
>> Paul Davis
>>
>> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>>> Is it possible to specify the Content-Type header of a document? Do
>>> you need to use a "show" function?
>>>
>>> -Sam
>>>
>>
>

Re: specify Content-Type of a document?

Posted by Samuel Wan <sa...@samuelwan.com>.
I'm trying to build a simple learning experiment where I can write
HTML and Javascript into documents, and retrieve them with a GET
request. However, I don't know how to specify text/html or
application/x-javascript as the Content-Type headers in the response
to a document request.

Is the recommended practice to simply store the html or js text as
attachments, or is it possible somehow to use a "show" function to
send them back with specific content type headers? I read some of
Chris Anderson's posts, the Safari Rough Cuts book, and looked a bit
at the CouchApp code, but it might be too much to grasp all at once
for me.

-Sam

On Tue, Apr 21, 2009 at 12:33 PM, Paul Davis
<pa...@gmail.com> wrote:
> Sam,
>
> We're consistently inconsistent in that we only sometimes check for
> the content-type when posting JSON documents. Of the top of my head I
> know we check in _temp_views but not for PUTs and POSTs to docs or
> _bulk_docs.
>
> If you mean for adding attachments to docs though CouchDB will just
> send you back the content-type header you attached it with so you can
> control what clients will see when fetching attachments.
>
> HTH,
> Paul Davis
>
> On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
>> Is it possible to specify the Content-Type header of a document? Do
>> you need to use a "show" function?
>>
>> -Sam
>>
>

Re: specify Content-Type of a document?

Posted by Paul Davis <pa...@gmail.com>.
Sam,

We're consistently inconsistent in that we only sometimes check for
the content-type when posting JSON documents. Of the top of my head I
know we check in _temp_views but not for PUTs and POSTs to docs or
_bulk_docs.

If you mean for adding attachments to docs though CouchDB will just
send you back the content-type header you attached it with so you can
control what clients will see when fetching attachments.

HTH,
Paul Davis

On Tue, Apr 21, 2009 at 3:28 PM, Samuel Wan <sa...@samuelwan.com> wrote:
> Is it possible to specify the Content-Type header of a document? Do
> you need to use a "show" function?
>
> -Sam
>