语法错误整数

时间:2017-11-13 12:12:29

标签: node.js angular postgresql pg-promise

有一个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);
    });
}

1 个答案:

答案 0 :(得分:1)

pg-promise根据其JavaScript类型格式化值。从错误中看,_idnewdata中至少有一个是字符串,而整数是预期的。

那么你为字段launched做了什么,你甚至不使用它,你应该对那些字段做以纠正这种类型:

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

这是推荐的方法。或者,您可以通过将::int附加到整数参数来执行服务器端转换:

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

另一种有用的方法:

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