就地更新功能得到“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(内部服务器错误)”

Azure 功能:运行/测试模式下出现 500 个内部内部服务器错误

500错误原因解决方法

部署网站:500 - 内部服务器错误

发布到 Azur 失败并出现 500 内部服务器错误

改造返回 500 内部服务器错误