如何处理查询字符串Node Js AWS Lambda

时间:2019-04-04 11:06:31

标签: mysql node.js aws-lambda

我正在使用AWS Lambda通过传递查询参数(例如)创建提取API。 vendorId,但在某些情况下,我需要整个数据而不传递查询参数,在这种情况下,我的代码已损坏。 让我知道如何处理查询参数。

  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();
        }
     });
  }

这是结果

          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

3 个答案:

答案 0 :(得分:2)

尝试一下-

event.queryStringParameters.pincode

答案 1 :(得分:1)

如果您使用API​​网关作为lambda函数的触发器,则查询参数位于event.queryStringParameters。因此,如果vendorid是GET参数,则应该执行event.queryStringParameters.vendorid。这是对Lambda的API网关代理请求的完整示例。

{
  "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"
  }
}

答案 2 :(得分:0)

您应该预先检查是否存在这样的对象:

if(event && event.query. && event.query.vendorid)