无法在Node.js res.body

时间:2015-12-01 09:42:57

标签: angularjs json node.js http-post

我正在为项目使用Angular 1.3和node.js 0.12.2。我正在使用

命中node.js api
$http.post("url", request_data){}

在服务器端使用:

console.log(req.body)

但每次调用api时,它都会为{}获取空对象request_data,无法解决问题所在。我曾经使用body_parser这样:

var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

还尝试在angular $ http中添加内容类型标题:

headers : {'Content-Type': 'applicatio n/x-www-form-urlencoded'}

但没有获得请求数据。

编辑:

Node.js代码:

router.post('/url',function(req,res){
    console.log(req.body)  
})

注意:Developer Tool的网络标签显示我正在发送的请求标头中的数据,但node.js服务器未在req.body中接收。 在POSTman中获取数据是正确的响应。

2 个答案:

答案 0 :(得分:1)

some ideas :

  • Maybe an URL error ? Make sure you aren't using a prefix like app.use('/api', router);
  • Look at the Content-Type :

application/x-www-form-urlencoded --> 'var1="SomeValue"&var2='+SomeVariable application/json;charset=UTF-8 --> {var1:"SomeValue", var2:SomeVariable}

  • You could use $http more explicitly :

$http({
  url: '...',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: 'var1="SomeValue"&var2='+SomeVariable
});

答案 1 :(得分:0)

我最好的猜测是你的有角$ http请求网址指向一个不好的终点。

<强> Angularjs

// data to post nodejs server
var _data = {
    'message': 'Can I help you?'
};


// angularjs $http post request
$http.post('/api/url', _data).then(function(respond){
    // if success
    console.log(respond);
}, function(error){
    // if an error
    console.error(error);
});

<强>的NodeJS

// router function
function something(req, res) {

    // console.log the request body
    console.log(req.body);

    // respond JSON object
    var _respond = {
        'status': 200
    };

    // expressjs respond a JSON with status code 200
    res.status(200).json(_respond);
}

// register route URL
router.post('/api/url', something);

请注意,代码端点网址相同: / api / url

因此,作为上述问题中的代码示例,您缺少/