Returnarea JSON cu Lambda prin API Gateway cu cartografiere (Programare, Amazon Web Services, Aws Lambda)

mysanders a intrebat.

Încerc să-mi dau seama cum să mapez un răspuns de la Lambda în API Gateway la diferite coduri de stare și, în același timp, să primesc un obiect JSON de la funcția mea Lambda.

Am următoarele în Lambda:

context.done('Not Found:',jsonObject);

Și în API Gateway, în răspuns de integrare Am un regex de eroare Lambda pe 403 care spune următoarele Nu s-a găsit:.*.Acest lucru funcționează, metoda returnează un răspuns 403.

Problema este că se pare că nu pot să returnez jsonObject.am încercat să creez un șablon de cartografiere aplicație/json care arată astfel (de asemenea, în cadrul răspunsului de integrare):

{"error" : $input.json('$')}

Dar acest lucru are ca rezultat doar un răspuns care arată așa:

{"error" : {"errorMessage":"Not Found:"}}

Înțeleg eu greșit șablonul de corespondență?

2 răspunsuri
tomodian

Dacă doriți să rămâneți cu comportamentul de legare implicit al lui Lambda, această abordare pare promițătoare.

Există o modalitate de a schimba codurile de stare http returnate de Amazon API Gateway?

De asemenea, Lambda va ignora cel de-al doilea parametru dacă primul error parametru este non-null.

Iată câteva cazuri în care funcționează Lambda.

Cazul 1: Primul parametru este nul.

exports.handler = function(event, context) {
  context.done(null, {hello: 'world'});
}

Rezultatul: Lambda returnează doar al doilea parametru în obiectul JSON.

{"hello": "world"}

Cazul 2: Primul parametru este un obiect non-null.

exports.handler = function(event, context) {
  context.done({ping: 'pong'}, {hello: 'world'});
}

Rezultatul: Lambda leagă automat primul parametru de errorMessage valoare. Observați că al doilea parametru {hello: 'world'} este eliminat.Este mai bine să nu se treacă un obiect, deoarece rezultă în [object Object].

{"errorMessage": "[object Object]"}

Cazul 3: Primul parametru este un șir de caractere non-null.

exports.handler = function(event, context) {
  context.done('pingpong', {hello: 'world'});
}

Rezultatul este următorul: Lambda leagă automat primul parametru la errorMessage valoare. Observați că al doilea parametru {hello: 'world'} este eliminat.

{"errorMessage": "pingpong"}

Arlo Carreon

Încearcă să schimbi șablonul tău cu acesta:

{"error" : $input.json('$').errorMessage}

$input.json(‘$’) ar trebui să reprezinte obiectul JSON returnat de lambda.