2017-11-13 2 views
0

Es gibt ein Angular 4 clientseitige Nodejs-Express Backend und PostgreSQL Datenbank. Das Problem ist, dass, wenn ich Daten an den Server gesendet werden soll (in meinem Submodul, was für eine To-do-Funktion ist) das Backend mir die schicken nächste:Syntax Fehler Integer

Meine Fehlermeldung lautet:

POST/api/datatodo 500 1.150 ms - 969 Fehler: ungültige Eingabesyntax für integer: ""

modal.ts

class Searches { 
    _id: string; 
    title: string; 
    newdata: string; 


    constructor(
    ){ 
     this.title = "" 
     this._id = "" 
     this.newdata = "" 
    } 
} 

der Einsatz Abfrage auf Backend:

function createSearch(req, res, next) { 
    req.body.launched = parseInt(req.body.launched); 
    db.none('INSERT INTO table (userid, word)' + 
     'values(${_id}, ${newdata})', 
    req.body) 
    .then(function() { 
     res.status(200) 
     .json({ 
      status: 'success', 
      message: 'Cool' 
     }); 
    }) 
    .catch(function (err) { 
     return next(err); 
    }); 
} 
+0

Sie verwandeln müssen ' ''' auf 'NULL'; PostgreSQL akzeptiert die leere Zeichenfolge nicht als gültige Darstellung einer Null-Ganzzahl. –

Antwort

1

pg-promise formatiert Werte nach ihrem JavaScript-Typ. Und von dem Fehler sieht es so aus, als ob mindestens einer von _id oder newdata eine Zeichenkette ist, während eine Ganzzahl erwartet wird.

Also, was Sie für das Feld tun launched, die Sie nicht einmal verwenden, sollten Sie auf diese Felder tun, um die Art zu beheben:

const a = req.body; 
a._id = +a._id; 
a.newdata = +a.newdata; 
db.none('INSERT INTO table(userid, word) VALUES(${_id}, ${newdata})', a) 

, dass der empfohlene Ansatz ist. Alternativ können Sie serverseitige Casting tun, indem ::int den ganzzahligen Parameter angehängt:

db.none('INSERT INTO table(userid, word) VALUES(${_id}::int, ${newdata}::int)', req.body) 

Und eine andere brauchbare Ansatz:

const a = req.body; 
db.none('INSERT INTO table(userid, word) VALUES($1, $2)', [+a._id, +a.newdata])