在 CouchDB/PouchDB-Server 中重写 URL

Rewrite URLs in CouchDB/PouchDB-Server

如果可能,我将如何使用 PouchDB Server 实现以下 URL 重写?

/index.html处显示/index/_design/index/_show/index.html的HTML输出。

/my_database/index.html,显示/my_database/_design/my_database/_show/index.html

我的目标是将 PouchDB(并最终 CouchDB)用作独立的 Web 服务器。

我正在努力将 rewrite documentation 翻译成工作代码。

Apache CouchDB uses an HTTP API 并且(因此)可以用作静态 Web 服务器——类似于 Nginx 或 Apache HTTPD,但还有一个额外的好处,即您还可以使用 MapReduce 视图、复制和其他位组成 Apache CouchDB。

只要有核心 API,您就可以将整个静态站点作为附件存储在单个 JSON 文档中,并从它自己的 URL 提供每个文件。如果该单个文档是 _design 文档,那么您将获得重写器的附加值。

这里有一个示例 faux JSON 文档可以做到这一点:

{
  "_id": "_design/site",
  "_attachments": {
    "index.html": {
      "content_type": "text/html",
      "data": "..."
    },
    "images/logo.png": {
      "content_type": "image/png",
      "data": "..."
  },
  "rewrites": [
    {
      "from": "/",
      "to": "index.html"
    }
  ]
}

"data": "..." 的实际值将是文件的 base64 编码版本。参见 Creating Multiple Attachments example in the CouchDB Docs.

您还可以使用 CouchDB 的管理员 UI,例如 Futon 或 Fauxton——可在 http://localhost:5984/_utils 获得——它们都提供文件上传功能。但是,这些系统将要求 JSON 文档首先存在,然后 PUT the attachment 直接进入数据库。

完成后,您可以设置一个 virtual host entry in CouchDB (or Cloudant) 指向该设计文档中的 _rewrite 端点。像这样:

[vhosts]
example.com = /example-com/_design/site/_rewrite/

如果您不在端口 80 上托管,则需要在 http://example.com:5984/ 请求站点。

仅当您想要将 JSON 转换为 HTML(或不同的 JSON 时,才需要使用 _show 函数(如您的示例), XML、CSV 等)。如果您只想要静态托管,那么上面的选项非常有效。 ^_^

创建这些文档也有很棒的工具。 couchapp.py and couchdb-push are the ones I use most often and both support the CouchApp filesystem mapping "spec".

希望对您有所帮助!