我有一个注册页面,要求用户输入用户名和电子邮件地址.
我需要检查用户名+电子邮件是否可用.如何使用一个HTTP请求执行此操作?
顺便说一下,用户名用作docID.
我现在正在做的是检查docID是否存在,然后使用视图检查电子邮件地址的可用性,但这是2个HTTP请求.
我考虑使用视图发出[用户名,电子邮件]作为密钥,并使用"密钥"参数= [用户名,电子邮件]查询视图.但如果用户名和电子邮件属于不同的现有用户,则无法使用此功能.
杰森. 山姆的解决方案非常有帮助,但正如您所说,它可能并不适合您。我可以想到另外两个选择。
假装您回到了 SQL。用户的主键是什么?它既不是用户名也不是电子邮件,而是两列。CouchDB 也是如此。
因此,为了绝对保证唯一性,答案很简单:它必须是 doc _id。例如,对于电子邮件为“jason@gmail.com”的用户“jason”,请发布此文档:
{ "_id": "jason:jason@gmail.com",
"other stuff": "blah blah blah"
}
Run Code Online (Sandbox Code Playgroud)
这是原子的、事务性的用户创建。它可以:
_rev属性。太棒了,该用户/电子邮件组合已被占用!当然,您可以简单地检查该名称是否可用GET /db/jason:jason@gmail.com。(您可以像数据库一样为 id 添加前缀_users,例如users:jason:jason@gmail.com— 这取决于您。)然后您可以POST稍后将其返回。同时也有可能会被采取,但这在现在网络上很常见的所有“先检查,后预订”形式中都是正常的。
第二个想法更只是仔细考虑你的情况。您说两个用户可以拥有相同的用户名和电子邮件。这听起来很奇怪。也许我读错了。以下是一些需要考虑的事情: