2017-11-13 9 views
0

Angular 4 클라이언트 측 Nodejs-Express 백엔드 및 PostgreSQL 데이터베이스가 있습니다. 문제는 내가 서버에 데이터를 보내려면 백엔드 나에게 보내 (내 서브 모듈에, 할 일 기능은 무엇인가)이다 다음 :구문 오류 정수

내 오류 메시지는 다음과 같습니다

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 = "" 
    } 
} 

백엔드에 삽입 쿼리 :

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은 빈 문자열을 null 정수의 유효한 표현으로 받아들이지 않습니다. –

답변

1

pg-promise은 자바 스크립트 유형에 따라 값을 형식화합니다. 그리고 오류에서 최소한 _id 또는 newdata 중 하나가 문자열이며 정수가 필요하다고 생각됩니다. 권장되는 접근 방식이다

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

: 당신은 심지어 유형을 수습하고, 당신이 그 분야에 어떻게해야 사용하지 않는 필드 launched, 위해 한 그래서

.

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])