AWS Lambda-如何根据查询参数是否存在使用条件条件?

时间:2019-06-09 09:45:04

标签: amazon-web-services aws-lambda

如果没有查询参数,我希望函数返回表中所有内容的列表,如果参数id存在,则返回一行。

var mysql = require('mysql');
var config = require('./config.json');
var pool  = mysql.createPool({
    host     : config.host,
    user     : config.user,
    password : config.password,
    database : config.database
  });
  exports.handler = (event, context, callback) => {
      var whereClause
      if(event.queryStringParameters.id !== null){
          let id = event.queryStringParameters.id
          whereClause = ' where id='+id
      }
    context.callbackWaitsForEmptyEventLoop = false;
    pool.getConnection(function(err, connection) {
        // Use the connection
        connection.query('SELECT * from users'+whereClause, function (error, results, fields) {
        // And done with the connection.
        connection.release();
        // Handle error after the release.
        if (err) callback(err);
        else {
            var response = {
                "statusCode": 200,
                "headers": {
                    "my_header": "my_value"
                },
                "body": JSON.stringify(results),
                "isBase64Encoded": false
            };
            callback(null, response);
        }
        });
    });
};

当不存在带有错误的查询参数时,该函数将失败

“无法读取null的属性'id'”

那是为什么?

2 个答案:

答案 0 :(得分:1)

您没有提供任何行号信息或堆栈跟踪,因此我猜测if语句失败是因为event.queryStringParameters为空:

if(event.queryStringParameters.id !== null)
    let id = event.queryStringParameters.id
    whereClause = ' where id='+id
}

您应该写:

if (event.queryStringParameters && event.queryStringParameters.id !== null) {
    let id = event.queryStringParameters.id;
    whereClause = ' where id=' + id;
}

话虽如此,您应该使用字符串连接将用户提供的值(例如id)注入SQL查询中。这使您容易受到SQL Injection攻击。以下是有关如何更安全地编写此代码的想法:How to prevent SQL Injection in Node.js

答案 1 :(得分:0)

您是否将AWS Lambda与Amazon API Gateway一起使用? AWS Lambda with Amazon API Gateway

在这种情况下:

  

确保在API网关中创建主体映射模板(集成请求->主体映射模板)。作为示例,下面是一个人体映射模板,该模板将查询参数电子邮件传递给您的lambda函数:{“ id”:“ $ input.params('id')”}

AWS Developer Forum