У меня проблемы с лямбда-функцией. Это текущая настройка:
Lambda отправляет запрос на публикацию в API. API извлекает данные из базы данных postgres и возвращает эти данные. Когда я использую Postman или локальную версию моей лямбда-функции, это работает. Когда я использую фактическую лямбда-функцию, API возвращает данные с нулевым значением.
Ниже приведены некоторые фрагменты кода:
лямбда:
const axios = require('axios')
exports.handler = async (event) => {
let rows = await axios.post('http:/server/getData', {
params: {
var: event.var
}
})
if(rows.data.statusCode == 204){
//no data available
}
else{
data = rows.data.info
}
};
Компонент API-маршрутизатора
var router = express.Router()
const Pool = require('pg').Pool
const mgmtdb = new Pool({ ... })
router.post('/getData', function(req, res){
database.query("SELECT info FROM table WHERE var=$1", [req.body.var], (error, results) => {
const rows = results.rows
if (error) {
throw error
}
let status = rows.length == 0 ? 204 : 200
var responseJSON ={};
responseJSON.statusCode = status;
responseJSON.info= rows[0] ? rows[0].info : null;
res.json(responseJSON);
})
})
module.exports = router
Когда я вызываю API из Postman, я получаю statusCode: 200 (данные доступны).
Если я вызываю API с теми же данными из лямбда-выражения, я получаю statusCode: 204 (данные отсутствуют).
Я считаю, что это проблема с асинхронным временем. Не знаю, чем могут отличаться ответы API ..
Возможно ли, что API в течение некоторого времени передает ответ отправителю, а не просто импульс? И начинается с потоковой передачи «данные отсутствуют», а затем, через несколько миллисекунд «о, я нашел некоторые данные, вот они»? И этот почтальон ждет завершения потока, а лямбда-функция - нет?
Заранее спасибо!