如何在Node.js 8.10v中将参数传递给事件对象AWS Lambda函数

时间:2018-09-04 11:59:35

标签: node.js aws-lambda

我正在做一个项目,我们正在创建一个无服务器架构来处理计算任务。如何在AWS Lambda函数中将参数传递给事件对象。

有任何参考链接,如果有的话,请提出建议。

index.js-lambda的处理函数

exports.handler = (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  const mysql = require("mysql");
  const pool = mysql.createPool({
    host: "test_db.xxxxxxxxxxx.us-east-2.rds.amazonaws.com",
    user: "root",
    password: "xxxxxxxx",
    database: "test_db",
    port: 3306
  });

  pool.getConnection((err, connection) => {
    if (err) throw err;

    // const { fund_name, returns, aum, rating, expense_ratio } = event.body; // BODY PARAMETER REMAINING
    const randomNumber = () => Math.random()*10+1;
    const fund_name = 'example';
    const returns = randomNumber();
    const aum = randomNumber();
    const rating = randomNumber();
    const expense_ratio = randomNumber();

    if (fund_name && returns && aum && rating && expense_ratio) {
      pool.getConnection((err, connection) => {
        if (err) {
          throw err;
        }

        const query = `INSERT INTO mutual_fund_tb(fund_name, returns, aum, rating, expense_ratio) VALUES ('${fund_name}', '${returns}', '${aum}', '${rating}', '${expense_ratio}')`;
        connection.query(query, (err, results, fields) => {
          if (err) {
            throw err;
          }

          if (results.affectedRows === 1) {
            const response = {
              data: {...event.body},
              message: "Data successfully inserted",
              status: "ok"
            };
            callback(null, response);
          } else {
            const response = {
              data: {},
              message: "Data unable to insert into database.",
              status: "failed"
            };
            callback(null, response);
          }
        });
      });
    } else {
      const response = {
        data: {},
        message: "Invalid arguments passed. Please pass valid arguments",
        status: "failed"
      };
      callback(null, response);
    }
  });
};

1 个答案:

答案 0 :(得分:4)

如果您使用的是API Gateway,然后在方法执行图上单击集成响应(集成类型Lambda函数),然后在其中有Body mapping template字段,您可以在其中添加application/json或{ {1}},然后手动输入映射,例如在我们的例子中,我们使用application / json

txt/xml 因此,可以在lambda函数中访问{ "abc" : $input.params('$def') } ,并且在调用API网关

时可以在abc上传递def

截至目前,您可以使用 lambda代理集成,然后就不需要提供此映射了,仍然可以访问参数 aws docs