N'a pas pu analyser corps de la requête en json: caractère Inattendu (\'-\' (code 45)) AWS Lambda + API + Facteur
J'ai essayé pendant quelques jours pour obtenir un paramètre envoyé à partir de la Passerelle API AWS pour une fonction Lambda et je vais avoir pas de succès.
J'ai décidé de commencer par le début, j'ai donc suivi leur procédure pas à pas (http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda)
J'ai vérifié cette procédure pas à pas à deux fois et j'ai suivi les étapes à la lettre.
Problème
Quand je test l'API de Facteur ou de Swift, j'obtiens l'erreur:
{"message": "n'a pas Pu analyser corps de la requête en json: caractère Inattendu (\'-\' (code 45)) en valeur numérique: attendu des chiffres (0-9) pour suivre le signe moins, pour une valeur numérique valide\n [Source: [B@c036d15; ligne: 1, colonnes: 3]"}
En facteur, Quand j'ai vue le résultat JSON je viens d'obtenir
Mauvais Chaîne
Fonction Lambda
La fonction est l'exemple de base de la Procédure pas à pas:
console.log('Loading event');
exports.handler = function(event, context) {
var name = (event.name === undefined ? 'No-Name' : event.name);
console.log('"Hello":"' + name + '"');
context.done(null, {"Hello":name}); //SUCCESS with message
};
Lors de l'épreuve à partir de la Console Lambda et avec les données de Test j'obtiens le résultat:
{
"Hello": "TestUser123"
}
Lorsqu'il est Testé à partir de la Passerelle API de Test, Le résultat est aussi:
{
"Hello": "TestUser123"
}
Quelqu'un peut voir pourquoi les deux consoles permettent à ce travail, mais lorsqu'il est testé avec FACTEUR ou utilisé à l'intérieur d'un Swift Script, ça ne fonctionne pas ?
Edit 1
Dans le facteur, j'ai défini le type de contenu pour application/json
Le script retourne la valeur par défaut:
{
"Hello": "user"
}
Cependant, Quand je l'ai ajouter dans les paramètres nom et TestUser123 en FACTEUR, c'est quand il renvoie l'erreur.
Mise à jour de 1
Ok, j'ai donc modifié le modèle de mappage à un que j'ai trouvé sur une autre réponse:
{ "name": "$input.params('name')" }
Maintenant, le résultat est:
{
"Hello": ""
}
Des Idées pourquoi il n'est pas le nom?
- Aucune Raison pour un downvote et sans commentaires - pas très utile
- J'ai remarqué que Facteur renvoie "Mauvais chaîne" par défaut (Body > Jolie). Changement pour le Brut de réaction.
Vous devez vous connecter pour publier un commentaire.
J'ai juste coincé avec cela aujourd'hui.
votre modèle de mappage est:
AWS utilise AWS Vitesse de modèles, qui, même si ressemble JSON, c'est différent.
si vous utilisez
pour le modèle de mappage droit à l'intégration de la demande de l'étape, alors il devrait fonctionner comme prévu.
$input.params('name')
??name=text
pour un modèle"name":input.params('name')
le nom de la propriété est définie à la valeur de nom, icitext
. Par défaut la Passerelle API de comportement est de transmettre la requête des objets comme s'ils ne correspondent pas à un modèle, par conséquent, vous pourriez ne pas remarquer la différence.Lire le message d'erreur très soigneusement, en effet, il vous indique le problème. Par exemple, j'ai eu
Donc, le problème, c'est que je suis en manque une virgule. J'ai vérifier mes Lambda Intégration Demande - Corps Modèle de Mappage:
Pouvez-vous repérer le problème? Il me manque une virgule après le revenu.
Voici un autre exemple.
Quand je regarde les Intégration Demande - Corps Modèle de Mappage:
Pouvez-vous repérer le problème? Il me manque un point dans $inputRootincome.
{"message": "Unsupported Media Type"}