我正在开发一个react-native应用程序,我在本地使用Couchbase lite作为数据库。这种方式的工作方式是在应用程序启动时生成本地REST服务器,并使用REST API与CouchbaseLite服务器通信。
我已经创建了一些设计文档,但是当我尝试更新这些文档时,我运行我的REST客户端(我用于调试的单独应用程序)时没有得到新的结果。当我GET
设计文档更新后它有一个新的_rev
时,新的map
函数就像我更新它一样,但每当我在视图上执行get
时结果与map
函数的第一个版本相同。
显然,get
未使用更新后的文档。
设计文档:
var designDoc = {
name: 'expenses',
language: 'javascript',
views: {
contact_parts_for_group: {
'map': function(doc){
if(doc.type == 'expense'){
emit('some things I emit', doc.amount)
}
}.toString()
}
}
};
我将此信息与正确的_rev
一起发送到服务器作为json正文:JSON.stringify(designDoc)
0.1。我正在通过PUT调用更新我的设计文档:
PUT /kittydb/_design/expenses?rev=4-6f89f1e13d1fbb89c712d6bab53ee7d4 HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest
Content-Length: 356
{"name":"expenses","language":"javascript","views":{"contact_parts_for_group":{"map":"function (doc){ if(doc.type=='expense'){ var i,len,part,ref; ref=doc.parts; for(i=0,len=ref.length;i<len;i++){ part=ref[i]; var amount=part.contact==doc.expense_by?-1*part.amount:part.amount; emit([doc.group_id,part.contact,part.contact==doc.expense_by],amount);}}}"}}}
0.2。我使用我目前开发的应用程序原型的界面填充数据库
0.3。我不确定你的意思。
0.4。这是get:
GET /kittydb/_design/expenses/_view/contact_parts_for_group HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest
有关评论的更多信息:
我正在使用适用于iOS的CouchbaseLite社区版1.1.1版。我将模拟器作为带有iOS 9.2的iPhone 6运行。
我制作了一些屏幕截图,以说明更多内容:
我不知道如何检索与此相关的地图功能,但它似乎做的是:
emit([doc.group_id,part.contact],amount)
我使用了上面的get。
现在我的更新:
PUT /kittydb/_design/expenses?rev=7-6f979706f38acce9c7db380fba8565e4 HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest
Content-Length: 350
{
"name": "expenses",
"language": "javascript",
"views": {
"contact_parts_for_group": {
"map": "function (doc){ if(doc.type=='expense'){ var i,len,part,ref; ref=doc.parts; for(i=0,len=ref.length;i<len;i++){ part=ref[i]; var amount=part.contact==doc.expense_by?-1*part.amount:part.amount; emit('Hello SO', 'Overflow');}}}"
}
}
}
现在应该做的是:emit('Hello SO', 'Overflow');
我在运行上述请求时收到此回复:
HTTP/1.1 201 Created
Location: http://127.0.0.1:5800/kittydb/_design/expenses
Content-Type: application/json
Server: CouchbaseLite 1.1 (unofficial)
Etag: "8-3ae4b6ff37b936657ca23acb8d836619"
Accept-Ranges: bytes
Date: Wed, 20 Jan 2016 21:57:03 GMT
Transfer-Encoding: chunked
{"id":"_design\/expenses","rev":"8-3ae4b6ff37b936657ca23acb8d836619","ok":true}
现在我再次运行get请求:
没有改变......
当我使用'type = expense'创建一个新文档时,我会得到相同的结果,只有更多。
答案 0 :(得分:0)
我不知道如何检索与此相关的地图功能
啊哈 - 如果您不知道原始视图定义的位置,并且您无法从设计文档中获取它,那么它可能是在本机代码中定义的(在应用启动时)时间。)这样的定义将覆盖设计文档中的一个。
我对React-Native一无所知。是否(如名称所示)应用程序中的本机代码?如果是,请寻找[CBLView setMapBlock: ...]
的电话。