2017-11-13 4 views
0

Angular 4クライアント側Nodejs-ExpressバックエンドとPostgreSQLデータベースがあります。問題は、私は、サーバーにデータを送信したい場合は、バックエンドが私に送って(私のサブモジュールでは、TODO機能は何である)ということで、次:構文エラー整数

私のエラーメッセージは次のとおりです。

POST/API/datatodo 500 1.150 MS - 969 エラー:整数のための無効な入力構文: ""

modal.ts

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


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

バックエンドでINSERTクエリ:

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

あなたはNULL' 'に'「」 '変換する必要がありますが、 PostgreSQLは空文字列をヌル整数の有効な表現として受け入れません。 –

答えて

1

pg-promiseは、JavaScriptの種類に応じて値をフォーマットします。そして、エラーから、_idまたはnewdataの少なくとも1つが文字列であり、整数が期待されるようです。

あなたはあなたも使用していないフィールドlaunched、のためにやったので、あなたはタイプ是正するためにこれらのフィールドに実行する必要があります。

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

推奨されるアプローチです。

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

、別の使用可能なアプローチ:別の方法として、あなたは整数パラメータに::int追加することにより、サーバー側の鋳造を行うことができます

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