Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Node.js使用AWS Lambda函数访问Postgres数据库_Node.js_Postgresql_Aws Lambda_Serverless Framework_Serverless - Fatal编程技术网

使用Node.js使用AWS Lambda函数访问Postgres数据库

使用Node.js使用AWS Lambda函数访问Postgres数据库,node.js,postgresql,aws-lambda,serverless-framework,serverless,Node.js,Postgresql,Aws Lambda,Serverless Framework,Serverless,我的“handler.js”函数连接到Postgres数据库,并使用node.js执行少量查询。我的函数在本地成功运行,但当作为AWS lambda访问时,查询不起作用 var { Pool, Client } = require('pg'); export function apiTest(event, context, callback) { var connectionString = 'postgresql://username:password@database.server.c

我的“handler.js”函数连接到Postgres数据库,并使用node.js执行少量查询。我的函数在本地成功运行,但当作为AWS lambda访问时,查询不起作用

var { Pool, Client } = require('pg');

export function apiTest(event, context, callback) {
  var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
  var client = new Client({
    connectionString: connectionString,
  })
  client.connect();
  console.log('Connected to PostgreSQL database');

  client.query('SELECT * from table', (err, res) => {
    console.log("inside query");
    var jsonString = JSON.stringify(res.rows);
    var jsonObj = JSON.parse(jsonString);

    const headers = {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Credentials": true
    };

    // Return status code 500 on error
    if (err) {
      const response = {
        statusCode: 500,
        headers: headers,
        body: JSON.stringify({
          status: false
        })
      };
      callback(null, response);
      client.end();
      return;
    }

    const response = {
      statusCode: 200,
      headers: headers,
      body: JSON.stringify(jsonObj)
    };

    callback(null, response);
    console.log("query success")
    client.end()
    context.succeed(context);
  })
}
我还在“serverless.yml”中添加了相应的vpc安全组和子网ID

var { Pool, Client } = require('pg');

export function apiTest(event, context, callback) {
  var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
  var client = new Client({
    connectionString: connectionString,
  })
  client.connect();
  console.log('Connected to PostgreSQL database');

  client.query('SELECT * from table', (err, res) => {
    console.log("inside query");
    var jsonString = JSON.stringify(res.rows);
    var jsonObj = JSON.parse(jsonString);

    const headers = {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Credentials": true
    };

    // Return status code 500 on error
    if (err) {
      const response = {
        statusCode: 500,
        headers: headers,
        body: JSON.stringify({
          status: false
        })
      };
      callback(null, response);
      client.end();
      return;
    }

    const response = {
      statusCode: 200,
      headers: headers,
      body: JSON.stringify(jsonObj)
    };

    callback(null, response);
    console.log("query success")
    client.end()
    context.succeed(context);
  })
}
“Cloudwatch”中的错误日志只显示查询前后的console.log语句,函数终止时出现超时错误。我想不出这个问题

var { Pool, Client } = require('pg');

export function apiTest(event, context, callback) {
  var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
  var client = new Client({
    connectionString: connectionString,
  })
  client.connect();
  console.log('Connected to PostgreSQL database');

  client.query('SELECT * from table', (err, res) => {
    console.log("inside query");
    var jsonString = JSON.stringify(res.rows);
    var jsonObj = JSON.parse(jsonString);

    const headers = {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Credentials": true
    };

    // Return status code 500 on error
    if (err) {
      const response = {
        statusCode: 500,
        headers: headers,
        body: JSON.stringify({
          status: false
        })
      };
      callback(null, response);
      client.end();
      return;
    }

    const response = {
      statusCode: 200,
      headers: headers,
      body: JSON.stringify(jsonObj)
    };

    callback(null, response);
    console.log("query success")
    client.end()
    context.succeed(context);
  })
}
我已在下面附上示例“handler.js”代码:

var { Pool, Client } = require('pg');

export function apiTest(event, context, callback) {
  var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
  var client = new Client({
    connectionString: connectionString,
  })
  client.connect();
  console.log('Connected to PostgreSQL database');

  client.query('SELECT * from table', (err, res) => {
    console.log("inside query");
    var jsonString = JSON.stringify(res.rows);
    var jsonObj = JSON.parse(jsonString);

    const headers = {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Credentials": true
    };

    // Return status code 500 on error
    if (err) {
      const response = {
        statusCode: 500,
        headers: headers,
        body: JSON.stringify({
          status: false
        })
      };
      callback(null, response);
      client.end();
      return;
    }

    const response = {
      statusCode: 200,
      headers: headers,
      body: JSON.stringify(jsonObj)
    };

    callback(null, response);
    console.log("query success")
    client.end()
    context.succeed(context);
  })
}

我认为如果你能提供更多关于实际错误的信息,那将是非常有用的。在哪里暂停?它是否打印出“连接到PostgreSQL数据库”?是的。它打印“连接到PostgreSQL数据库”。我尝试在client.query块之后添加console.log。即使已打印,但client.query中的语句也未打印。如果超时,则查询所用时间超过默认的3秒,或者连接到挂起应用程序的数据库时出错。请先尝试延长Lambda允许运行的时间,以查看是否有其他错误。@deepakasinathan发布代码时,请正确设置格式,以便我们能够轻松阅读。我们越容易理解你的问题,别人就越容易回答你的问题。@AthensHolloway我确实在VPC中托管了数据库,但似乎lamda没有获得AWS中数据库的权限。在设置了“授予访问权限”之后,它工作了。谢谢你的评论