就地更新功能得到“500(内部服务器错误)”
Posted
技术标签:
【中文标题】就地更新功能得到“500(内部服务器错误)”【英文标题】:In place update function get "500 (Internal Server Error)" 【发布时间】:2019-11-05 16:24:17 【问题描述】:我使用的是 couchDB 3.2.1。我有一个包含视图和更新功能的设计文档。我在尝试运行函数时收到 500(内部服务器错误),使用 PUT 和 fetchAPI 传递文档: http://my.company.xyz:5984/brunel/_design/brunel/_update/customerPrefs/5509
我尝试通过在函数末尾返回文档来进行调试,但仍然遇到同样的问题。
设计文档如下所示:
"_id": "_design/brunel",
"_rev": "11-33c446a585aa4a63f3f848bd4979d721",
"views":
"productCategoryNames":
"map": "function (doc) if ((doc.recordType === 'product') && doc.categoryName && doc.categoryCode) emit([doc.categoryCode, doc.categoryName], null); ",
"reduce": "_count"
,
"invoiceNumbers":
"map": "function (doc) if (doc.recordType === 'invoice') emit(doc.invoiceNumber, null); ",
"reduce": "_count"
,
"supplierNames":
"map": "function (doc) if ((doc.recordType === 'supplier') && doc.supplierName) emit(doc.supplierName, null); ",
"reduce": "_count"
,
"productNames":
"map": "function (doc) if ((doc.recordType === 'product') && doc.description) emit(doc.description, null); ",
"reduce": "_count"
,
"customerNames":
"map": "function (doc) if ((doc.recordType === 'customer') && doc.customerName) emit(doc.customerName, null); ",
"reduce": "_count"
,
"batchReceiveDates":
"map": "function (doc) if (doc.recordType === 'batch') emit(doc.batchNumber, null); "
,
"updates":
"customerPrefs": "function (doc, req) return [doc]; "
我认为我将更新函数声明为设计文档的一部分的方式可能有问题。
我的目标是使用适当的更新函数来传递密钥对,这些密钥对将存储/附加在一个数组中,这是现有文档的一部分。
couchDB 日志显示以下错误:
[错误] 2019-06-23T19:11:48.879976Z couchdb@127.0.0.1 6734daf161 操作系统进程错误 :: >,>
【问题讨论】:
来自the docs,您应该返回一个二元素数组,但您没有这样做。如果向数组中添加第二个元素,一切正常吗? 谢谢。我还学到了一些其他的惨痛教训: - 你不能在函数中使用 cmets。 - 您不能使用“let”来声明变量。 - 一些 ES6 符号似乎不起作用。 【参考方案1】:感谢 Flimzy 指出函数必须返回两个值。我还发现查看 couchDB 日志文件对调试更新处理程序中的 javascript 错误很有用。
【讨论】:
以上是关于就地更新功能得到“500(内部服务器错误)”的主要内容,如果未能解决你的问题,请参考以下文章
从 OpenLayer 3 访问 Geoserver 得到“500(内部服务器错误)”