Я сталкивался с ошибкой, когда запускал свое приложение React Native на устройстве Android (физическом и в эмуляторе).Тем не менее, никаких проблем на iOS.Эти функции должны сканировать таблицу базы данных на предмет пользовательских дескрипторов и возвращать объект, если дескриптор уже существует.
Вот как выглядит ошибка:
TypeError: Cannot read property 'handle' of null
at exports.handler (/var/task/index.js:7:36)
Я использую React Native, AWS Lambda и EXPO.
Этот код находится в пределах dbfunctions.js
на внешнем интерфейсе.
export async function scanHandles(){
return new Promise((resolve, reject) => {
let { auth } = store.getState()
let reqBody = {
userId: auth.user.username,
handle: auth.handle_update,
}
let path = '/u/scan-handle'
let myInit = {
headers: { 'Content-Type': 'application/json' },
body: reqBody,
}
console.log('myInit', myInit)
console.log('handle', auth.handle_update)
API.get(apiName, path, myInit)
.then((resp) => {
// if false, then handle does not exist
// if true, then handle already exists
resolve(resp)
})
.catch((error) => {
console.warn('Scan Handle', error)
reject(error)
})
})
}
Ведение журнала консоли auth.handle_update
выводит ожидаемую строку.myInit
также распечатывает ожидаемый объект.
На заднем конце я использую это для сканирования:
const AWS = require("aws-sdk");
const docClient = new AWS.DynamoDB.DocumentClient({ region: "us-west-1" });
exports.handler = (event, context, callback) => {
let e = JSON.parse(event.body);
var params = {
TableName: event.stageVariables.user,
FilterExpression: "handle = :handle",
ExpressionAttributeValues: { ":handle": e.handle }
};
docClient.scan(params, function(err, data) {
if (err) {
console.log("ERROR:", err);
let response = {
statusCode: err.statusCode,
headers: {},
body: JSON.stringify(err)
};
callback(response);
}
if (data.Count >= 1) {
// if user name exists
// call back handle exists response
let handleExistsResponse = {
statusCode: 200,
body: JSON.stringify({ Success: true })
};
callback(null, handleExistsResponse);
} else {
let response = {
statusCode: 200,
body: JSON.stringify({ Success: false })
};
callback(null, response);
}
});
};
Любая идея о том, почему это будет работать на iOS ине Android?
РЕДАКТИРОВАТЬ:
При дальнейшем тестировании let e = JSON.parse(event.body)
возвращает null
.Итак, я вошел в консоль event
и получил большой старый объект.В этом объекте я нашел body
, а он все еще null
.Таким образом, объект тела не проходит его должным образом.Все еще не понимает, работает ли она на iOS, а не на Android.