2013-02-27 6 views
5

uscite console.log così,Che tipo di oggetto è l'errore node-postgres? Perché il nodo console.log e JSON.stringify lo gestiscono in modo diverso?

{ [error: syntax error at or near "step"] 
    length: 86, 
    name: 'error', 
    severity: 'ERROR', 
    code: '42601', 
    detail: undefined, 
    hint: undefined, 
    position: '62', 
    internalPosition: undefined, 
    internalQuery: undefined, 
    where: undefined, 
    file: 'scan.l', 
    line: '1001', 
    routine: 'scanner_yyerror' } 

ma JSON.stringify non vede la parte narrativa di un errore,

{ "lunghezza": 86, "name": "l'errore" , "gravità": "ERRORE", "codice": "42601", "posizione": "62", "file": "scan.l", "linea": "1001", "routine": "scanner_yyerror" }

io non riesco a capire come ottenere questo "errore: colonna 'non definito' non esiste" wikies lettura (https://github.com/brianc/node-postgres/wiki/Error-handling, http://nodejs.ru/doc/v0.4.x/stdio.html#console.log)

Il codice è così,

client.query(selstring, function(err, result) { 
    if(err){ 
    res.send(JSON.stringify(err)); 
    console.log(err); 
    }else{ 

grazie

UPDATE: err.toString() mostra error: syntax error at or near "step"

+0

si prega di inviare i contenuti di 'selstring'. – robertklep

+0

non penso che importi davvero, ma eccolo qui: 'seleziona max (data) :: carattere che varia dt dal calendario where11 passo = 0 '. il mio compito è ottenere la descrizione dell'errore. la domanda è intenzionalmente errata – fedd

+1

Oh, scusami, ho frainteso la tua domanda :(Che cosa restituisce 'err.toString()? – robertklep

risposta

5

Poiché l'errore pg è una sottoclasse dell'errore standard Js() obj e quindi l'errore di base "descrizione" è accessibile tramite err.message ...

console.log(new Error("hello world")); 
[Error: hello world] 
console.log(new Error("hello world").message); 
hello world 

È possibile creare una sottoclasse dell'oggetto errore standard per i propri objs errore aggiungendo il post della l'Error.prototype

See Kevin How do I create a custom Error in JavaScript?

-1

ho lottato per capire la stessa cosa per molto tempo.

Guardando l'output di JSON.stringify(err), sembra che l'oggetto abbia un array come attributo senza nome. Com'è possibile creare un oggetto con un attributo anonimo? Una volta mi sono imbattuto in questo problema per un po 'di tempo, ma non sono riuscito a trovare alcun modo per costruire qualsiasi oggetto che potesse generare una struttura simile da JSON.stringify.

Ho trovato err.message effettivamente funziona per accedere alla stringa, ma davvero non capisco perché, come 'messaggio' non appare come un attributo nella versione con stringa. Se 'message' è un attributo di err, perché non compare nell'output da stringify? Se non lo è, allora da dove viene?

0

La soluzione semplice consiste nell'aggiungere parametri di porta alla connessione, anche se è la porta predefinita. Ho avuto lo stesso identico problema. Ho scoperto la soluzione da questo github issue.

var pg_conn_conf = { 
    username: 'user', 
    pass: 'pass', 
    port: 5432, 
    host: 'localhost', 
    db: 'mydb' 
}; 

c'è anche un altro stackoverflow answer che suggerisce di estendere l'Error.prototype, per fortuna non si ha a che fare con che in questo caso. Ma è un buon trucco per saperlo.