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

xyhw6mcr  于 2023-02-28  发布在  Mysql
关注(0)|答案(4)|浏览(93)

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

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
z9ju0rcb

z9ju0rcb1#

如果您使用API Gateway作为lambda函数的触发器,那么查询参数可以在event.queryStringParameters中找到。因此,如果vendorid是GET参数,那么您应该使用event.queryStringParameters.vendorid。下面是API Gateway Proxy请求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"
  }
}
9udxz4iz

9udxz4iz2#

你应该像这样预先检查对象和它的键是否存在:

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

4jb9z9bj3#

试试这个-

event.queryStringParameters.pincode
q8l4jmvw

q8l4jmvw4#

我知道这一个是旧的,但对我来说,它的工作时,我使用以下

event.queryStringParameters?.vendorid

注意?.运算符,因为查询字符串中可能不存在vendorid

相关问题