【问题标题】:How can you rotate banner ads using CouchApp & CouchDB?如何使用 CouchApp 和 CouchDB 旋转横幅广告?
【发布时间】:2010-08-21 05:39:33
【问题描述】:

对于上下文:这是一个 HTML 应用程序,几乎没有或没有浏览器端 JavaScript。我无法轻易更改,因此需要在服务器上执行此操作。

CouchDB 的构建没有副作用。这很公平。但是,我似乎没有办法通过节目、视图、列表来改变向用户显示的内容以及后续请求或基于用户对象,而无需写入数据。

获取文档的请求会导致创建新记录吗?我猜这不会是副作用。

但如果可以的话,您可以创建一个日志,然后有一个视图来选择广告公司 一组描述广告的文档,这些文档在显示之前的广告时会受到日志中的更改的影响。

我实际上不会在我的网站上展示广告,我将提供提示、文章摘要和因页面加载而异的次要功能。

任何建议表示赞赏。

我已经考虑如何使用grain 来实现我需要的其余功能,但这一点似乎与couchdb 的工作方式相反。

【问题讨论】:

  • 哎呀。这是一个艰难的,吉姆。你能解释一下为什么你在客户端避免使用 js 吗?
  • 因为,我将主要使用它来为每个用户定制页面。我避免使用客户端 JavaScript,因为该站点需要对搜索引擎友好。我有更好的方式来描述这个问题。想想 google...当您登录时,google 会根据您的 pat 搜索历史记录注释和 ordervsearch 结果。我需要根据用户的偏好更改我向用户显示的数据,并且我不想为谷歌制作单独的版本,也不想将一千个结果发送给客户进行重新排序。现在,看来我会在前面粘贴 node.js 或其他东西。
  • 好的。但是,如果您使用我在下面概述的列表功能,我相信您可以实现这一点。让 list 函数进行重新排序,并确保您从 user-prefs-storing 文档中发出字段作为 View 的一部分, list 函数从中获取其数据。

标签: views couchdb side-effects


【解决方案1】:

我认为您将需要一个列表函数,它从视图中接收一组文档,然后仅选择一个返回,无论是随机还是其他方法。但是,由于您位于列表函数中,因此您可以访问用户的请求详细信息,包括 cookie(您也可以设置,顺便说一句。)这听起来更像您想要的。

此外,您可以为列表函数指定不同的视图以在查询时使用。这意味着,您可以在首页上仅显示随机文章,但在所有其他文章上显示任何类型的内容。

注意:您无法在 map/reduce 函数中访问请求,如果您在 map 函数中执行 Math.random() 之类的操作,则会遇到问题。

所以列表函数是要走的路。

http://guide.couchdb.org/draft/transforming.html

【讨论】:

  • 访问用户 cookie 将允许我在 users 表中获取用户文档,然后使用该数据将转换应用于列表函数中行的排序。但是,因为这会破坏缓存能力,据我了解,couchdb 不会让我从列表中查询十个用户配置文件或显示函数来更改结果。这意味着我需要一个 web 框架来做这个处理,我相信。
  • 我的理解是,CouchDB 通过对最终输出进行哈希处理来为 show 和 list 函数生成 Etag。所以缓存的能力不应该被破坏。
  • 另外,请记住您将列表函数与视图一起使用(map/reduce 函数对)。因此,您的视图可以从用户文档中发出字段,并且还可以发出您从中选择的文档以向用户显示。然后,您的列表函数将可以访问与用户相关的字段以及可供选择的文档列表。
  • 还有一件事:听起来您可能正在尝试访问 _users 数据库并在其中存储首选项。如果您这样做,那么您将无法访问另一个数据库中定义的视图中的数据。 (尽管您可能可以将它作为列表或显示函数中的 req 对象的一部分进行访问。我不确定,但它类似于 req.userCtx.yourFieldName。)
【解决方案2】:

查看从视图中选择随机文档的各种方法。这应该使您能够选择要显示的随机文档(可能代表广告、提示等)。

【讨论】:

  • 好吧,至少知道它是可能的就足够了。我正在阅读 couchdb 的权威指南,并将密切关注查看章节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2017-04-30
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2020-11-20
相关资源
最近更新 更多