how to disable / turn-off / refresh couchdb cachin

2019-05-21 03:24发布

I have a list that has some basic authentication on a document. The issue I am having is that the list is caching so the user will not see they have access unless I update the revision id. How do you show a non-cached list?

if (req.userCtx.name === doc.permissions.owner) {
    return 'you have permission';   
}
else {
    return 'you do not';
}

How I would imagine it done is by passing no-cache or update the ETAG or something of that sort in the header, but nothing seems to work. Here is an attempt I have that sends a new date in the head every time to make it not cache, but this doesn't work.

var date = new Date().getTime() + 'x';
start({code: 200, headers: {'Content-Type': 'text/html', 'date': date}});

Any ideas greatly appreciated!

By the way I am looking for a pure couch solution.

2条回答
我想做一个坏孩纸
2楼-- · 2019-05-21 03:33

So after a lot more digging I found this:

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

Cutting to the important parts:

  • ETags are handled by the List and Shows
  • version up to 1.2 your user must have a role, then they will get different ETags.
  • 1.3 will introduce new ETags per user name.

Hope this helps someone.

查看更多
我命由我不由天
3楼-- · 2019-05-21 03:39

Fortunately CouchDB sources are available! I was able to find this algorithm in couch_mrview_show.erl:

show_etag(#httpd{user_ctx=UserCtx}=Req, Doc, DDoc, More) ->
    Accept = couch_httpd:header_value(Req, "Accept"),
    DocPart = case Doc of
        nil -> nil;
        Doc -> couch_httpd:doc_etag(Doc)
    end,
    couch_httpd:make_etag({couch_httpd:doc_etag(DDoc), DocPart, Accept,
        {UserCtx#user_ctx.name, UserCtx#user_ctx.roles}, More}).

Here we could see that Shows are cached unless one of the following things changed:

  • Design doc, which contain the show function
  • The doc which is used to render the show
  • 'Accept' HTTP request header
  • Username (it means that show is rendered at least once for each user)
  • Set of user roles in user context
查看更多
登录 后发表回答