2017-02-07 2 views
1

Ich bin neu zu Knoten und anschließend pg-Versprechen. Was ich in meiner Node-Express-App erreichen möchte, ist eine Route, die als API funktioniert, um ein einzelnes Feldupdate in einer Tabelle in der Datenbank durchzuführen. Dies muss nur eine einzelne Route sein, die mit Tabellenname, Spaltenname, Spaltenwert und Spalten-ID-Wert aufgerufen wird, um zu identifizieren, welche Zeile in der Tabelle aktualisiert werden soll.Wie übergeben Sie Tabellennamen und Parameter mit pg-promise

Dies ist der Code, den ich bisher versucht haben, aber ich kann nicht scheinen, richtig zu machen:

router.post('/update_db_field', function (req, res, next) { 
    db.one('update $table~ set $dbcol~=$dbcolval~ where $dbcolid~=$dbcolidval~ returning $colid~', [ 
     req.body.table, 
     req.body.dbcol, 
     req.body.dbcolid, 
     req.body.dbcolval, 
     req.body.dbcolidval 
    ]).then(function (data) { 
     console.log(data) 
     res.send(data) 
    }).catch(function (error) { 
     console.log("ERROR:", error.message || error); // print error; 
    }); 
}) 

Leider wird folgende Fehler es wirft:

ERROR: syntax error at or near "$"

Gibt es auch eine Möglichkeit, die Abfragezeichenfolge aus der catch()-Funktion zu drucken, so dass das Debugging ein wenig einfacher sein kann?

+0

sieht aus wie Ihre Abfrage ist ungültig das $ -Zeichen bezieht sich auf die Parameter ab $ 1 $ 2 usw., die auf das Array params –

+0

Vielen Dank. Wie kann ich den Abfragetext auf der Konsole anzeigen? –

+0

@ FabrizioMazzoni war meine Antwort nicht gut genug? ;) –

Antwort

1

Sie verwirren variable Formatierung mit benannten Parameter, sollten Sie Ihre Abfrage sein:

router.post('/update_db_field', function (req, res, next) { 
    db.one('UPDATE ${table~} SET ${dbcol~} = ${dbcolval} WHERE ${dbcolid~} = {dbcolidval} RETURNING ${colid~}', req.body, a => a[req.body.dbcolid]) 
    .then(function (dbcolid) { 
     console.log(dbcold) 
     res.send(dbcolid) 
    }) 
    .catch(function (error) { 
     console.log("ERROR:", error.message || error); // print error; 
    }); 
}) 

Obwohl Sie immer noch wahrscheinlich Probleme haben, weil in einer dynamischen Tabelle vorbei + Spalte bedeutet, dass Sie nicht wissen, wie sie zu gieße ihr richtiger Typ, so zum Beispiel können Sie am Ende mit Ihrem dbcolval als String übergeben werden, während es eine ganze Zahl sein muss, und dann wird die Abfrage deshalb ablehnen.

Beachten Sie, dass wir optional a => a[req.body.dbcolid] hinzugefügt haben, so dass es nicht mit einem Objekt mit einer Eigenschaft aufgelöst wird, sondern direkt mit dem Eigenschaftswert aufgelöst wird.

How can I see the query text printed in console?

var query = pgp.as.format(query, values); 
console.log(query); 

API: as.format.

Verwandte Themen