-1

Ich bin neu in DynamoDB und node.js ich einen Code geschrieben haben, in dem er eine Abfrage an die Datenbank (DynamoDB) machen und schauen für ein Element, das vom Benutzer in der Datenbank eingegeben wird. Ich kann das überprüfen, aber wenn der Benutzer mit einer anderen Nummer versucht, die nicht in der Datenbank vorhanden ist, erhalte ich einen Nullwert.Erste Nullwert, wenn sie versuchen Wert abfragen, die db mit node.js nicht im Dynamo ist

Mein Tabellenname ist „DevReferenceNumber“ und nur eine Spalte, die Primärschlüssel „Referenznummer“ ist.

'use strict'; 

    var AWS = require('aws-sdk'); 

    var docClient = new AWS.DynamoDB.DocumentClient({ region : 'us-east-1'}); 


    function close(sessionAttributes, fulfillmentState, message) { 
     return { 
      sessionAttributes, 
      dialogAction: { 
       type: 'Close', 
       fulfillmentState, 
       message, 
      }, 
     }; 
    } 


    exports.handler = (event, context, callback) => { 

    try{ 

     console.log(`event.bot.name=${event.bot.name}`); 

     if(event.bot.name != 'getCustomerReferenceNumber'){ 
      callback('Invalid Bot Name'); 
     } 

     dispatch(event, (response) => { 

      callback(null, response) 

     }); 

    }catch(err){ 


     callback("Error is occured while querying"); 

    } 

    }; 
    function dispatch(intentRequest, callback){ 

    console.log(`dispatch UserID => ${intentRequest.userId}, intentName => ${intentRequest.currentIntent.name}`); 

    const intentName = intentRequest.currentIntent.name; 

     if(intentName === "checkReferenceNumber"){ 
     return referenceNumber(intentRequest, callback); 

     } 



} 
function referenceNumber(intentRequest, callback){ 

    const enteredReferenceNumber = intentRequest.currentIntent.slots.ReferenceNumber; 
    const sessionAttributes = intentRequest.sessionAttributes; 

    console.log("User has entered reference number is --> " + enteredReferenceNumber); 

    var params = { 

     TableName : "DevReferenceNumber", 
     KeyConditionExpression: "#refer = :ref", 
     ProjectionExpression : "#refer", 
     ExpressionAttributeNames: { 
      "#refer" : "referencenumber" 
     }, 
     ExpressionAttributeValues:{ 
      ":ref": parseInt(enteredReferenceNumber) 
     } 
    }; 

    docClient.query(params, function(err, data){ 


     if(err){ 

      callback(close(sessionAttributes, 'Fulfilled', { 
        contentType: 'PlainText', 
        content : 'Developer reference number is not matched with data from database'})); 
     } 

     else { 

      data.Items.forEach(function (item){ 

       console.log("User matched data is ==> " + item.referencenumber); 

       callback(close(sessionAttributes, 'Fulfilled', { 
        contentType: 'PlainText', 
        content : 'Developer reference number is matched with data from database'})); 
      }); 
     } 



    }); 
} 

Antwort

1

Es ist offensichtlich, dass Sie einen Null-Datensatz erhalten werden, wenn Sie keinen passenden Datensatz haben. Wenn Sie keinen NULL-Rückruf von Node wünschen, können Sie eine benutzerdefinierte Logik ausführen, um eine NULL-Prüfung durchzuführen und Daten entsprechend Ihren Wünschen zurückzugeben.

+0

Wenn ich durch das Dokument gegangen bin, erwähne ich, dass, wenn es kein Element gibt, es einen leeren Satz zurückgibt. Ich habe versucht, eine Bedingung wie if (data.length == 0) setzen, dann Callbacks, aber es ist immer noch null drucken. Können Sie mir mit einem Beispielcode helfen? –

+0

Ich habe die Antwort, die ich mit einer der Eigenschaften mit dem leeren Satz überprüft. Vielen Dank –