Node.js, error de PostgreSQL: no hay entrada pg_hba.conf para el host

Estoy siguiendo este artículo (( http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/ ). Ya tengo implementé mi aplicación en heroku y actualmente utilizo express, node.js, para intentar conectarme a una base de datos PostgresSQL en Heroku que acabo de instalar. Llego al final del artículo y uso el comando

node myfile.js 

Me sale este error

 error: no pg_hba.conf entry for host "...", user "...", database "...", ... 

¿Cómo hago para crear uno y dónde debo ubicarlo en el directorio de mi aplicación?

A continuación se muestra el mensaje de error completo. Cambié las cadenas para la dirección IP, el usuario y la base de datos, pero se ve básicamente igual.

 events.js:72 throw er; // Unhandled 'error' event ^ error: no pg_hba.conf entry for host "00.000.000.00", user "username", database "databasename", SSL off at Connection.parseE (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:526:11) at Connection.parseMessage (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:356:17) at Socket. (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:105:22) at Socket.emit (events.js:95:17) at Socket. (_stream_readable.js:748:14) at Socket.emit (events.js:92:17) at emitReadable_ (_stream_readable.js:410:10) at emitReadable (_stream_readable.js:406:5) at readableAddChunk (_stream_readable.js:168:9) at Socket.Readable.push (_stream_readable.js:130:10) 

Edit: hice un poco más de investigación y encontré que el archivo ‘pg_hba.conf’ está en mi

 /usr/local/var/postgres 

y agregué esta línea en el archivo ‘pg_hba.conf’

 # TYPE DATABASE USER ADDRESS METHOD host all all trust 

también trató

 # TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 md5 

pero sigue diciendo que no hay ninguna entrada para mi host, usuario, base de datos, etc … ¿mi syntax ‘pg_hba.conf’ es incorrecta de alguna manera?

Cambia tu código de conexión para usar ssl. Siguiendo tu ejemplo vinculado:

 var conString = "pg://admin:[email protected]:5432/Employees"; var client = new pg.Client(conString); client.connect(); 

se convierte en:

 var client = new pg.Client({ user: "admin", password: "guest", database: "Employees", port: 5432, host: "localhost", ssl: true }); client.connect(); 

https://github.com/brianc/node-postgres/wiki/Client#new-clientobject-config–client

En el caso de que sequelize ignora todos sus esfuerzos para activar ssl, puede intentar convencer a pg para habilitar ssl para todas las conexiones de forma predeterminada:

 var pg = require('pg'); pg.defaults.ssl = true; const Sequelize = require('sequelize'); const sequelize = new Sequelize('postgres://...'); 

También puede utilizar la VARIABLE DE CONFIGURACIÓN AMBIENTAL ‘PGSSLMODE’ para ‘requerir’ a través de la interfaz web de Heroku o CLI.

Caso: Postgres dB configurado como un complemento de Heroku y adjunto a la aplicación en un Heroku Dyno.

Heroku proporciona un soporte bastante bueno sobre cómo conectarse a una de sus bases de datos complementarias; sin embargo, desafortunadamente omite (o, me lo perdí) cualquier mención de qué hacer para aplicar SSL ya que todos los niveles de Heroku dB que comienzan con Standard-0 aplican SSL de forma predeterminada.

Nos encontramos con este error al actualizar la base de datos de pg en heroku de hobby tier a standard-0 . Se requiere SSL, pero no lo establecimos en nuestra configuración.

Incluir en la configuración al inicializar la nueva secuela (…)

 "dialect": "postgres", "dialectOptions": { "ssl": true } 

Este truco fue que la opción ssl está envuelta en dialectOptions . encontrado aquí: https://github.com/sequelize/sequelize/issues/956#issuecomment-147745033

Solo agregue una bandera a la inicialización del cliente:

Cambio

 const conString = "pg://admin:[email protected]:5432/Employees" const client = new pg.Client(conString); client.connect(); 

A

 const conString = "pg://admin:[email protected]:5432/Employees" const client = new pg.Client({ connectionString: process.env.DATABASE_URL, ssl: true }); client.connect();