是否可以将数据发布到沙发数据库并返回数据?

时间:2014-08-09 04:04:00

标签: post couchdb

例如,我想将用户分数发送到数据库,而不是返回典型状态,id和rev我希望它返回用户排名。我猜这不可能,但我想问。

2 个答案:

答案 0 :(得分:1)

对HTTP POST / PUT的响应应该只用于帮助您确认它是否成功。

我甚至很难看到如何获得couchdb视图返回的用户的等级,除非您检索所有用户的数据并计算出用户的位置。

此用例...

  • 简单结构化数据清晰表格
  • 快速响应数字列的要求(计算得分等级的方法)
  • 或者每次提交排名时触发更新分数表的要求。

......非常有点像经典案例,你可能想要使用关系数据库。

答案 1 :(得分:0)

如果可以从您要使用http请求更改的文档中计算结果,则可以使用更新处理程序PUT更改文档并return该结果:

// 'myhandler' update function
function(doc, req) {
  // create a shorthand for json reponses
  var json_reponse = function(obj, code) {
    return { 
        headers: { 'Content-Type': 'application/json' }
      , body: JSON.stringify(obj) 
      , code: code
      }
  }

  // assume the incoming body is json and parse it
  // needs proper error handling still
  var body = JSON.parse(req.body)

  // doc is the user document we are patching
  // return an error if it isn't there
  if(!doc) 
    return [null, json_response({error: 'user document not found'}, 404)]

  // return an error if new_score is missing from body
  if(!body.new_score) 
    return [null, json_response({error: 'missing property new_score'}, 400)

  // now patch the user doc
  doc.score = body.new_score

  // calculate the new rank depending on your own method
  var my_rank = my_rank_function(doc.score, Math.PI, 'bananarama')

  return [doc, json_response({success: true, rank: my_rank}, 200)
}

现在PUT新数据接收新排名:

request(
  { method: 'PUT'
  , url: httptp://127.0.0.1:5984/mydb/_design/myddoc/_update/myhandler/myuserdocid
  , json: {"new_score": 42}
  , headers: { "Content-Type: application/json" }
  }
, function(err, response, body) {
    console.log("user's new rank:", JSON.parse(body).rank)
  }
)

应打印user's new rank: LEVEL 11 EIGHTIES GIRL GROUP LEADER

nb:我不在工作,所以不能确认代码有效,但是你应该把它搞定......