Dynamodb filterExpression с несколькими условиями не работает - PullRequest
0 голосов
/ 24 января 2020

У меня есть запрос dynamodb в nodejs следующим образом. I have a matching record, но не возвращает никаких значений. Любая идея, чтобы решить проблему?

const docClient = new AWS.DynamoDB.DocumentClient({ region: "ap-south-1" });
var userParams = {
        TableName: "aa-users",
        FilterExpression: '#email = :emailval AND #postProfileOTP = :otpval',
        ExpressionAttributeNames: {
              "#email": "email",
              "#postProfileOTP": "postProfileOTP"
          },
        ExpressionAttributeValues: {
            ":emailval": email,
            ":otpval": otp
        }
    };
    docClient.scan(userParams, function (err, data) {
         console.log(data.Count) // not getting the result count
         if(data.Count > 0){
          res.status(200).json({ "status": 1, "data": data.Items })
         }
    })

Вместо этого получаю ошибку следующим образом:

2020-01-24T11: 56: 20.554Z ee0fd306-6bd5-4cf0-957e -732b08c6b0e3 ОШИБКА Uncaught Exception {"errorType": "TypeError", "errorMessage": "Невозможно прочитать свойство 'Count' из null", "code": "TypeError", "message": "Невозможно прочитать свойство 'Count' из null "," time ":" 2020-01-24T11: 56: 20.554Z "," stack ": [" TypeError: Невозможно прочитать свойство 'Count' из null "," в Response. (/var/task/handler.js: 351: 18) "," по запросу. (/Var/task/node_modules/aws-sdk/lib/request.js:364:18) "," в Request.callListeners (/ var / task / node_modules / aws -sdk / lib / sequential_executor. js: 106: 20) "," at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js : 78: 10) "," в Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14) "," в Request.transition (/ var / task /node_modules/aws-sdk/lib/request.js:22:10) "," в AcceptorStateMachine.runTo (/ var / task / node_modu) les / aws -sdk / lib / state_machine. js: 14: 12) "," в /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10 ", "по запросу. (/var/task/node_modules/aws-sdk/lib/request.js:38:9) "," по запросу. (/var/task/node_modules/aws-sdk/lib/request.js:685:12) "]}

Ответы [ 2 ]

1 голос
/ 24 января 2020

просто выйдите из сообщения об ошибке, выданной DynamoDb. Мы узнаем причину.

Вот так

`

docClient.scan(userParams, function (err, data) {
      if(err) console.log(err)
         if(data.Count > 0){
          res.status(200).json({ "status": 1, "data": data.Items })
         }

`

1 голос
/ 24 января 2020

Похоже, AWS возвращает ошибку, а не результаты / данные. Когда вы получаете обратный вызов с параметром «err» в качестве первого аргумента, вы должны всегда проверять, что он не установлен, прежде чем продолжить. Например:

if (err) {
   console.error(err)
   // recover in some way, or kill process
   process.exit(1)
}

При этом ошибка, возвращаемая с AWS, будет записана на консоль, и вы получите гораздо лучшее представление о том, что происходит не так.

...