Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Aws lambda ECONREFUNCE 127.0.0.1:5432 RDS,Postgres_Aws Lambda_Amazon Rds_Aws Serverless_Node Postgres - Fatal编程技术网

Aws lambda ECONREFUNCE 127.0.0.1:5432 RDS,Postgres

Aws lambda ECONREFUNCE 127.0.0.1:5432 RDS,Postgres,aws-lambda,amazon-rds,aws-serverless,node-postgres,Aws Lambda,Amazon Rds,Aws Serverless,Node Postgres,我被这个错误困扰了很长一段时间,我想看看是否有人知道该怎么做 我正在使用Lambda创建一个端点,我希望在命中该端点时,首先将一个契约插入到运行在RDS上的postgres db中,然后将消息的内容插入到同一个数据库中(并使用SES发送电子邮件,但我已经找到了这一部分)。我想做的是将一个新的postgres池传递到下面的send message函数中,但每次我这样做,并尝试访问数据库时,我都会得到一个错误:connect econnrefered127.0.0.1:5432 在TCPConnec

我被这个错误困扰了很长一段时间,我想看看是否有人知道该怎么做

我正在使用Lambda创建一个端点,我希望在命中该端点时,首先将一个契约插入到运行在RDS上的postgres db中,然后将消息的内容插入到同一个数据库中(并使用SES发送电子邮件,但我已经找到了这一部分)。我想做的是将一个新的postgres池传递到下面的send message函数中,但每次我这样做,并尝试访问数据库时,我都会得到一个
错误:connect econnrefered127.0.0.1:5432
在TCPConnectWrap.afterConnect[as oncomplete](net.js:1141:16)
。这是我脱机运行serverless的时候。初始SQL查询运行,但第二个查询不运行

我非常感谢您的指导,我已经在下面粘贴了相关的代码片段。这是我第一次用JavaScript做任何事情,所以这可能是一个非常愚蠢的问题

contracts.js

const db = require('../db_connect');
const messages = require('./messages');

//POST endpoint to create a generic contract, it's worth keeping in mind that whenever we create a contract, it will always default to false for field isFinished
module.exports.createContract = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;

    const reqBody = JSON.parse(event.body);
    const influencerID = reqBody.influencerID;
    const buyerID = reqBody.buyerID;
    const monetaryValue = reqBody.monetaryValue;
    const charityID = reqBody.charityID;

    db.query('INSERT INTO contracts(influencer_id, buyer_id, monetary_value, charity_id, is_finished) VALUES($1, $2, $3, $4, false)', [influencerID, buyerID, monetaryValue, charityID])
        .then(res => {
            callback(null, {
                statusCode: 200,
                body: 'successfully inserted contract'
            })
            messages.sendMessage(db, reqBody, buyerID, influencerID)
        })
         .catch(e => {
            console.log(e);
            callback(null, {
                statusCode: e.statusCode || 500,
                body: 'Error:' + e
            });
        }); 

};

var dotenv = require('dotenv').config();
var aws = require('aws-sdk')
const db = require('../db_connect');


function sendMessage(reqBody, senderID, receiverID) {

  const messageBody = reqBody.messageBody;
  const timestamp = Date.now();

  var receiverEmail;

  db.query("SELECT e_mail FROM users WHERE user_id = $1", [receiverID])
  .then(res => {
    console.log(res)
    receiverEmail = res.rows[0]
    console.log("this is the new email --> ", receiverEmail)
  })
  .catch(e =>{
    throw console.error(e);
  })
}
messages.js

const db = require('../db_connect');
const messages = require('./messages');

//POST endpoint to create a generic contract, it's worth keeping in mind that whenever we create a contract, it will always default to false for field isFinished
module.exports.createContract = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;

    const reqBody = JSON.parse(event.body);
    const influencerID = reqBody.influencerID;
    const buyerID = reqBody.buyerID;
    const monetaryValue = reqBody.monetaryValue;
    const charityID = reqBody.charityID;

    db.query('INSERT INTO contracts(influencer_id, buyer_id, monetary_value, charity_id, is_finished) VALUES($1, $2, $3, $4, false)', [influencerID, buyerID, monetaryValue, charityID])
        .then(res => {
            callback(null, {
                statusCode: 200,
                body: 'successfully inserted contract'
            })
            messages.sendMessage(db, reqBody, buyerID, influencerID)
        })
         .catch(e => {
            console.log(e);
            callback(null, {
                statusCode: e.statusCode || 500,
                body: 'Error:' + e
            });
        }); 

};

var dotenv = require('dotenv').config();
var aws = require('aws-sdk')
const db = require('../db_connect');


function sendMessage(reqBody, senderID, receiverID) {

  const messageBody = reqBody.messageBody;
  const timestamp = Date.now();

  var receiverEmail;

  db.query("SELECT e_mail FROM users WHERE user_id = $1", [receiverID])
  .then(res => {
    console.log(res)
    receiverEmail = res.rows[0]
    console.log("this is the new email --> ", receiverEmail)
  })
  .catch(e =>{
    throw console.error(e);
  })
}

最终,这个错误是因为您试图连接到代码运行的同一台机器上的PostgreSQL实例。很明显,在Lambda上这不会出现。你在哪里托管数据库?@stdunbar,我在RDS上托管数据库你在哪里创建与数据库的连接?您需要在某处指定主机名-它必须默认为localhost,而不是您的RDS。我知道它一直在影响RDS db,因为我有其他正常工作的端点。我将检查它是否在任何地方被覆盖,尽管我得到了纠正,我的端点以前工作过,但现在它们都有相同的错误!最终,这个错误是因为您试图连接到代码运行的同一台机器上的PostgreSQL实例。很明显,在Lambda上这不会出现。你在哪里托管数据库?@stdunbar,我在RDS上托管数据库你在哪里创建与数据库的连接?您需要在某处指定主机名-它必须默认为localhost,而不是您的RDS。我知道它一直在影响RDS db,因为我有其他正常工作的端点。我将检查它是否在任何地方被覆盖,尽管我得到了纠正,我的端点以前工作过,但现在它们都有相同的错误!