0

我有一个与数据库有关的问题。我目前正在使用 Gupshup 机器人编程。这里这里有两种不同的数据持久化模式。在高级数据持久化中,记录了以下代码将数据放入数据库:

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);
}
4

1 回答 1

1

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

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

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

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

我正在将您的示例重构为使用 3 个关键字并硬编码一些东西,例如 -

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

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

  2. 存款- 在此,代码将在余额中添加 1000

  3. 显示 - 在此,代码向用户显示余额。

代码 -

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.");
}
于 2016-11-11T10:05:07.187 回答