2014-09-28 52 views
3

我尝试使用快递和MySQL的代码休息的API,但我有问题,将数据插入到数据库节点快递MySQL驱动程序插入操作错误

router.route('/todo') 
.post(function(req, res){ 
    if(connection){ 
     var obj = { 
      task: req.body.task, 
      date: Date() 
     } 
     connection.query('insert into task set ?', obj , function(err, info){ 
      if (err) throw err; 
      console.log('dodano z id:' + info.insertId); 
      res.redirect('/'); 
     }); 
    } 
}) 
.get(function(req, res){ 
    if(connection) { 
     connection.query('select * from task order by id', function(err, rows){ 
      if(err) throw err; 
      res.json(rows); 
      res.end; 
     }); 
    } 
}); 

我用一个简单的Firefox插件问题的REST API,当我发帖子方法{“任务”:“一”}我在控制台上得到这个错误:错误:ER_BAD_NULL_ERROR:列'任务'不能为空。

我做错了什么?

+0

'console.dir(req.body.task);'在您的POST处理程序中输出了什么? – mscdex 2014-09-28 16:12:23

回答

2

我认为发生的事情是您的req.body未被填充,可能是由于丢失或配置错误的适当身体处理中间件。这背后的推理是mysql module treats both javascript undefined and null values as the mysql null value。因此,如果req.body未被填充,则表示req.body.task === undefined,这意味着mysql模块将使用mysql值。这会导致您看到的错误,因为您的任务列不允许使用null

所以,你需要确保:

  • 您正在使用某种形式的JSON体这条路线在什么地方解析中间件。因此,例如body-parser有一个json身体分析器,您可以通过bodyParser.json()use()

  • 您的请求发送正确Content-Type头,例如:Content-Type: application/json(一个charset参数可以任选地加入到Content-Type头值)。