TypeError:Body未定义且无法读取属性

时间:2018-02-27 03:43:28

标签: node.js rest

我正在使用node和postgres创建Restful API。我目前正在创建一个POST函数,并且遇到了一些问题。现在,我正在尝试测试我的功能,但我遇到了一个似乎未定义的请求体。

 57 function createAction(req, res) { 
 58   pool.connect(function(err,client,done) {
 59     if(err){
 60       console.log("Not able to get connection "+ err + "\n");
 61       res.status(400).send(err);
 62     }
 63     
 64     req.body.otherKey = parseInt(req.body.otherKey); // ERROR HERE
 65     client.query('INSERT INTO acts(dateDone, completed, otherKey)'
 66     + 'values(${dateDone}, ${completed}, ${otherKey})',
 67     req.body, function(err,res) {
 68       
 69       done();
 70       if(err){
 71         console.log(err);
 72         res.status(400).send(err);
 73       }
 74       
 75       res.status(200);
 76       console.log("Successfully created new action");
 77     });
 78   });
 79 }

我正在使用以下代码对其进行测试:

curl -d "dateDone=testPOST&completed=f&otherKey=100" http://127.0.0.1:3000/api/actions

错误消息如下:

TypeError: Cannot read property 'otherKey' of undefined

1 个答案:

答案 0 :(得分:0)

req.body未定义,因为" body"没有被解析。 使用中间件body-parser https://www.npmjs.com/package/body-parser

或者您可以手动定义包装器。

function postWrapper(req, res, cb) {
  req.on('data', function(data) {
    if (!req.body) {
      req.body = '';
    }
    req.body += data.toString();
  });
  req.on('end', function() {
    cb(req, res);
  });
}

然后:

function createAction(req, res) {
    postWrapper(req, res, function(req, res){
        // your code
    }
}