Имам проблем с моята ламбда функция. Това е текущата настройка:
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 с точно същите данни от lambda, получавам statusCode: 204 (няма налични данни).
Вярвам, че това е проблем с асинхронното време. Не знам как отговорите от API могат да се различават ..
Възможно ли е API да предава отговора обратно към инициатора за известно време, а не просто импулс? И започва с поточно "няма налични данни" и след това, след няколко милисекунди "о, намерих някои данни, ето ги"? И този Postman чака потока да приключи, а ламбда функцията не го прави?
Благодаря предварително!