从Node.js应用程序连接到通过RDS在Amazon上托管的Postgres时发生超时错误

时间:2019-07-13 02:26:20

标签: node.js postgresql amazon-web-services

我正在尝试在Node.js应用程序中使用postgres。我已经创建了一个数据库实例,并且正在使用pg连接到它。当我尝试连接到它时,出现错误:

{ Error: connect ETIMEDOUT xxx.xx.xx.xxx:5432
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1097:14)
  errno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: 'xxx.xx.xx.xxx',
  port: 5432 }

我已经确保数据库是公共的。我在SO和google和duckduckgo上搜索了此错误,但找不到类似的错误。

我已经两次和三次检查主机,用户,数据库,密码和端口是否正确。我正在使用pg文档here和aws文档here来建立我的连接。

我希望任何人都可以提供任何见解。

const express = require('express');
const logger = require('morgan');
const helmet = require('helmet');

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

const server = express();

server.use(logger('dev'));
server.use(helmet());

const keys = require('./keys/keys');

const pgConfig = {
    host: keys.pgHost,
    user: keys.pgUserName,
    database: keys.pgDBName,
    password: keys.pgUserPW,
    port: keys.pgDBPort
};

const pool = new Pool({ ...pgConfig });

server.get('/', async (req, res) => {
    await pool.connect((err, client, release) => {
        if (err) {
            console.log(err);
        }
    })

    return res.status(200).send('<h1>Welcome to the server</h1>');
});

module.exports = server;

编辑:我能够使用与我的项目中保存的主机,数据库用户名和密码相同的主机,使用pgadmin连接到数据库

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。我实际上连接成功。我没有返回pool.connect(),这导致了超时。我将其更改为以下内容,现在它可以解决“无错误”和无连接超时错误。

await pool.connect((err, client, release) => {
    if (err) {
        console.log(err);
    } else {
        return console.log("no error");
    }
})