J'utilise AWS Lambda pour créer une API de récupération en passant un paramètre de requête, par exemple. vendorId, mais dans certains cas, j'ai besoin de données entières sans passer le paramètre de requête et dans ce cas, mon code est cassé. Dites-moi comment je peux gérer le paramètre de requête.
Response: { "errorMessage": "RequestId: 42fd18b1-598c-4f7e-b93b- b146777772b2 Process exited before completing request" } Request ID: "42fd18b1-598c-4f7e-b93b-b146777772b2" Function Logs: START RequestId: 42fd18b1-598c-4f7e-b93b-b146777772b2 Version: $LATEST 2019-04-04T10:48:34.959Z 42fd18b1-598c-4f7e-b93b- b146777772b2 TypeError: Cannot read property 'vendorid' of undefined
voici le résultat
var mysql=require('mysql'); //Require whatever connector you need. function getConnection() { var params={ host : 'myhostinfo', user : 'myuser', password : 'mypwd', database : 'mydb' }; return mysql.createConnection(params); } //This is your handler. exports.handler=function(event, context,callback) { //This is declared inside the handler: it is guaranteed to never be reused!. var connection=getConnection(); var fetchvendors=""; if(event.query.vendorid) { var vendorid=parseInt(event.query.vendorid); fetchvendors="SELECT v.*,c.vcategoryname FROM `tbl_vendors` v LEFT OUTER JOIN tbl_demo_categories c ON v.vendorcatid=c.vcategoryid WHERE v.vendorid="+vendorid; } else{ fetchvendors="SELECT v.*,c.vcategoryname FROM `tbl_vendors` v LEFT OUTER JOIN tbl_demo_categories c ON v.vendorcatid=c.vcategoryid WHERE status=1"; } connection.query(fetchvendors, function (error, results, fields) { if (error) { connection.destroy(); throw error; } else { // connected! callback(null, results); connection.end(); } }); }
3 Réponses :
vous devriez effectuer une pré-vérification de l'existence de l'objet et de ses clés comme ceci:
if(event && event.query && event.query.vendorid)
Merci pour la réponse, Désolé de dire que le problème est toujours le même.
après avoir essayé la solution ci-dessus, quelle erreur obtenez-vous? Veuillez partager l'erreur.
cela a résolu mon problème car il y avait quelque chose qui n'allait pas dans mon code, car dans mon modèle de chaîne, j'utilise param au lieu d'une requête. Merci beaucoup
Si vous utilisez API Gateway comme déclencheur de la fonction lambda, les paramètres de requête sont disponibles dans event.queryStringParameters
. Vous devriez donc faire event.queryStringParameters.vendorid
si vendorid est le paramètre GET. Voici un exemple complet de requête de proxy API Gateway adressée à Lambda.
{ "body": "eyP0ZXQ0IjoiYm9keSJ9", "resource": "/{proxy+}", "path": "/path/to/resource", "httpMethod": "POST", "isBase64Encoded": true, "queryStringParameters": { "foo": "bar" }, "pathParameters": { "proxy": "/path/to/resource" }, "stageVariables": { "baz": "qux" }, "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, sdch", "Accept-Language": "en-US,en;q=0.8", "Cache-Control": "max-age=0", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Desktop-Viewer": "true", "CloudFront-Is-Mobile-Viewer": "false", "CloudFront-Is-SmartTV-Viewer": "false", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Viewer-Country": "US", "Host": "1234567890.execute-api.us-east-1.amazonaws.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Custom User Agent String", "Via": "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "cDehZQoZnx43VYQb9j2-naCh-9y396Uhbp027Y2JvkCPNLmGJHqlaA==", "X-Forwarded-For": "127.0.0.1, 127.0.0.2", "X-Forwarded-Port": "443", "X-Forwarded-Proto": "https" }, "requestContext": { "accountId": "123456789012", "resourceId": "123456", "stage": "prod", "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef", "requestTime": "09/Apr/2015:12:34:56 +0000", "requestTimeEpoch": 1428582896000, "identity": { "cognitoIdentityPoolId": null, "accountId": null, "cognitoIdentityId": null, "caller": null, "accessKey": null, "sourceIp": "127.0.0.1", "cognitoAuthenticationType": null, "cognitoAuthenticationProvider": null, "userArn": null, "userAgent": "Custom User Agent String", "user": null }, "path": "/prod/path/to/resource", "resourcePath": "/{proxy+}", "httpMethod": "POST", "apiId": "1234567890", "protocol": "HTTP/1.1" } }
Essayez ceci -
event.queryStringParameters.pincode