2014-06-14 12 views
10

Sto riscontrando un problema di connessione a un database di Postgres di Heroku tramite Node.js. Ho trovato un'altra istanza di qualcuno che ha riscontrato questo problema ma il suo suggerimento non funziona nel mio caso.TypeError: Impossibile chiamare il metodo 'query' di null - quando si chiama pg.connect con Heroku node.js

Definisco var DB_URL come l'intero database di Postgres archiviato da Heroku. Lo faccio perché process.env.DATABASE_URL non è definito. (Questo era il suggerimento dell'altro post di overflow dello stack).

Il codice di tentare la connessione è: capo

pg.connect(DB_URL, function(err, client) { 
    client.query(...) 

Quando esegue:

client.query('INSERT INTO bookmarks (username, title, image, url) VALUES (  
^ 
TypeError: Cannot call method 'query' of null 

Dove da nullo a cui fa riferimento l'oggetto client che è destinata ad essere passato nel pg.connect funzione anonima.

Consiglio apprezzato, ho guardato in alto e in basso intorno ai documenti Heroku e su Google in abbondanza senza successo.

risposta

1

Non ho molta familiarità con il modo in cui ci si connette al database, ma ecco come lo farei. Forse potresti provare questo come alternativa. Questo funziona per me.

var pg = require('pg'); 

// Get your USER, PW (password) , HOST, PORT, and DATABASE variables from heroku 
// so that you can put them in your connection string. 

var conString = "pg://" + USER + ":" + PW + "@" + HOST + ":" + PORT + "/" 
    + DATABASE + "?ssl=true"; 
var client = new pg.Client(connString); 


// Now you can start querying your database. Here is a sample. 

client.connect(function(err) { 
    if (err) { 
    return console.error('could not connect to postgresq',err); 
    } 
    var query = "SELECT fieldName FROM \"Users\" where username='" + username + "';" 
    client.query(query, function(err, result) { 
     if (err) { 
      return console.err("could not complete query", err); 
     } 
     client.end(); 
     console.log(result.rows[0].fieldName); 

    }); 
}) 
27

Ho avuto lo stesso problema con il mio sito e quello che era più frustrante è che ha funzionato sul sito schierato, ma quando stavo cercando di eseguire il sito in locale (tramite caposquadra) ho ottenuto questo errore. Da l'errore ho capito che non riesco a connettersi al database e di verificare ulteriormente queste sono le due ragioni che hanno causato questo errore:

  1. No variabile d'ambiente DATABASE_URL
    Per qualche motivo non ho avuto il process.env.DATABASE_URL impostato nel mio file .env sebbene sia stato impostato correttamente sul sito remoto. Per risolvere questo problema puoi eseguire "heroku config" e copiare il DATABASE_URL richiesto nel tuo file .env locale (se questo file non esiste, crearne uno).
    Nota importante: Quando si copia incolla, le variabili cambiano il carattere ":" in "=".

  2. ? Ssl = true non è parte del DATABASE_URL
    Grazie a quanto sopra fissano il cliente ora sa dove collegare, ma ancora non poteva aprire la connessione a causa di problemi di autenticazione. Aggiungendo ? Ssl = true a DATABASE_URL, il problema è stato risolto definitivamente. Sembra che quando si tenta di connettersi dal sito remoto (server heroku) non è necessario passare il parametro ma quando si sta tentando di connettersi al database dal proprio computer locale è necessaria questa autenticazione per effettuare una connessione corretta.

Spero che possa essere d'aiuto.

+8

aggiunta DATABASE_URL = postgres: // xxx? Ssl = true per .env ha fatto il lavoro! thnx –

+1

heroku config ha visualizzato DATABASE_URL, ma nel file .env non era presente ... dopo averlo aggiunto nel file .env e aggiunto il? ssl = true tutto ha funzionato :) – Lusk116

Problemi correlati