无法在高级数据持久性模式下更新表

时间:2016-11-05 19:14:46

标签: json node.js javascript-events bots gupshup

我遇到了与数据库有关的问题。我目前正在使用Gupshup bot编程。有两种不同的数据持久性模式,可以读取herehere。在高级数据持久性中,记录以下代码以将数据放入数据库

function MessageHandler(context, event) {
      if(event.message=='update bug - 1452') {
         jiraUpdate(context);
    }
          }
   function jiraUpdate(context){
       //connect to Jira and check for latest update and values
       if(true){
      context.simpledb.doPut("1452" ,"{\"status\":\"QA pending\",\"lastUpdated\":\"06\/05\/2016\",\"userName\":\"John\",\"comment\":\"Dependent on builds team to provide right build\"}");
} else{
         context.sendResponse('No new updates');
}
  }
function DbPutHandler(context, event) {
      context.sendResponse("New update in the bug, type in the bug id to see the update");
     } 

如果我只想更改表中具有键值1452的行中的一列(例如状态或上次更新),我无法执行此操作。怎么办?

我使用了以下代码:

function MessageHandler(context, event) {
    // var nlpToken = "xxxxxxxxxxxxxxxxxxxxxxx";//Your API.ai token
    // context.sendResponse(JSON.stringify(event));
if(event.message=='deposit') {
         context.sendResponse("Enter the amount to be deposited");
    }

     if(event.message=="1000") {
        jiraUpdate(context);
    }

    if(event.message== "show"){
context.simpledb.doGet("1452");

    }
}

function HttpResponseHandler(context, event) {
           var dateJson = JSON.parse(event.getresp);
           var date = dateJson.date;
           context.sendResponse("Today's date is : "+date+":-)");
       }

function jiraUpdate(context){
       //connect to Jira and check for latest update and values
       if(true){
      context.simpledb.doPut("aaa" ,"{\"account_number\":\"90400\",\"balance\":\"5800\"}");
} else{
         context.sendResponse('No new updates');
}

 }

/** Functions declared below are required **/
function EventHandler(context, event) {
    if (!context.simpledb.botleveldata.numinstance)
        context.simpledb.botleveldata.numinstance = 0;
    numinstances = parseInt(context.simpledb.botleveldata.numinstance) + 1;
    context.simpledb.botleveldata.numinstance = numinstances;
    context.sendResponse("Thanks for adding me. You are:" + numinstances);
}



function DbGetHandler(context, event) {
    var bugObj = JSON.parse(event.dbval);
             var bal = bugObj.balance;
  var acc = bugObj.account_number;
  context.sendResponse(bal);
  var a = parseInt (bal,10);
  var b = a +1000;
  var num = b.toString();
  context.simpledb.doPut.aaa.balance = num;


}

function DbPutHandler(context, event) {
    context.sendResponse("testdbput keyword was last put by:" + event.dbval);
}

1 个答案:

答案 0 :(得分:1)

由于Gupshup提供的托管数据库是AWS的 DynamoDB 。因此,您可以输入一些键作为键值对。

因此,您必须设置正确的密钥,同时使用 doPut 方法将数据存储到数据库中,并使用相同的密钥通过 doGet 方法。

要更新数据,首先应调用 doGet 方法,然后使用正确的数据更新JSON,然后调用 doPut 方法以使用最新数据更新数据库。< / p>

我还添加了文档中没有的内容,您现在可以进行数据库调用并选择响应所使用的功能。

我正在重构你的例子,例如使用3个关键字和硬编码的东西 - 例如

  1. - 这将使用这些值更新数据库

    {"account_number":"90400","balance":"5800"}

  2. 存款 - 在此基础上,代码会向余额中添加1000

  3. 显示 - 就此而言,代码向用户显示余额。

  4. 代码 -

    function MessageHandler(context, event) {
    
    if(event.message=='have') {
        var data = {"account_number":"90400","balance":"5800"};
          context.simpledb.doPut(event.sender,JSON.stringify(data),insertData); //using event.sender to keep the key unique
          return;
        }
    if(event.message=="deposit") {
       context.simpledb.doGet(event.sender, updateData);
        return;
    }
    if(event.message== "show"){
    context.simpledb.doGet(event.sender);
    return;
        }
    }
    function insertData(context){
        context.sendResponse("I have your data now. To update just say \"deposit\"");
    }
    function updateData(context,event){
      var bugObj = JSON.parse(event.dbval);
    
      var bal = bugObj.balance;
      var a = parseInt(bal,10);
      var b = a + 1000;
      var num = b.toString();
      bugObj.balance = num;
    
     context.simpledb.doPut(event.sender,bugObj);
    }
    
    function EventHandler(context, event) {
        if (!context.simpledb.botleveldata.numinstance)
            context.simpledb.botleveldata.numinstance = 0;
        numinstances = parseInt(context.simpledb.botleveldata.numinstance) + 1;
        context.simpledb.botleveldata.numinstance = numinstances;
        context.sendResponse("Thanks for adding me. You are:" + numinstances);
    }
    
    function DbGetHandler(context, event) {
         var accountObj = JSON.parse(event.dbval);
         context.sendResponse(accountObj);
    }
    
    function DbPutHandler(context, event) {
        context.sendResponse("I have updated your data. Just say \"show\" to view the data.");
    }