Caching 如何禁用/关闭/刷新couchdb缓存

Caching 如何禁用/关闭/刷新couchdb缓存,caching,couchdb,Caching,Couchdb,我有一个列表,在文档上有一些基本的身份验证。我遇到的问题是列表正在缓存,因此除非我更新修订id,否则用户将看不到他们有访问权限。如何显示未缓存的列表 if (req.userCtx.name === doc.permissions.owner) { return 'you have permission'; } else { return 'you do not'; } 我可以想象这样做的方式是不传递缓存或更新ETAG或头中的类似内容,但似乎什么都不起作用。我有一个尝试,

我有一个列表,在文档上有一些基本的身份验证。我遇到的问题是列表正在缓存,因此除非我更新修订id,否则用户将看不到他们有访问权限。如何显示未缓存的列表

if (req.userCtx.name === doc.permissions.owner) {
    return 'you have permission';   
}
else {
    return 'you do not';
}
我可以想象这样做的方式是不传递缓存或更新ETAG或头中的类似内容,但似乎什么都不起作用。我有一个尝试,每次在头部发送一个新的日期,使其不缓存,但这不起作用

var date = new Date().getTime() + 'x';
start({code: 200, headers: {'Content-Type': 'text/html', 'date': date}});
非常感谢您的任何想法


顺便说一句,我正在寻找一种纯粹的沙发解决方案。

因此,经过更多的挖掘,我发现:

切割到重要零件:

  • ETag由列表处理并显示
  • 版本高达1.2您的用户必须具有角色,然后他们将获得不同的ETag
  • 1.3将为每个用户名引入新的ETag

希望这对某人有所帮助。

幸运的是,CouchDB资源可用!我在coach\u mrview\u 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}).
在这里,我们可以看到,除非以下情况之一发生更改,否则节目将被缓存:

  • 设计文档,包含显示功能
  • 用于呈现节目的文档
  • “接受”HTTP请求头
  • 用户名(表示每个用户至少呈现一次show)
  • 用户上下文中的用户角色集