节点js请求参数值不解析

时间:2017-03-09 13:49:46

标签: jquery node.js cordova

我创建了node.js服务器并解析了jquery请求。

jquery请求:

 $.post("http://localhost:3000/usertoken/",
        {
          "token": "1212555",
        },
        function(data,status){


 alert("Data: " + data + "\nStatus: " + status);
        }); 

节点服务器

var express = require('express');
var sub_server = require('./sub_server.js'); 
var bodyParser = require('body-parser')

var app = express();
app.listen(3000);
app.use(express.static('www'))
// parse application/json
app.use(bodyParser.json())


app.get('/:id', function(req, res){
    console.log("request:",req.params.id);
    res.send('The id you specified is ' + req.params.id);
});

var firebase_token;
// Post method
app.post('/usertoken', function(req, res){

    var token1 = req.body.token;;
    console.log("req parameter:",token1);

    res.end( JSON.stringify("hemant"));

});

我收到消息。 req参数:undefined

帮助我获得后期价值。

谢谢。

2 个答案:

答案 0 :(得分:0)

确保使用正文解析器:

var bodyParser = require('body-parser');

并使用:

app.use(bodyParser.json());

如果您在请求中使用JSON正文,或者:

app.use(bodyParser.urlencoded({ extended: false }));

如果您使用application/x-www-form-urlencoded - 在这两种情况下都要确保在请求中发送正确的MIME类型。

请参阅文档:https://www.npmjs.com/package/body-parser

有关详细信息,请参阅以下答案:

答案 1 :(得分:0)

虽然您的服务器应该正常工作,但您的客户端却没有。

您错过了contentType来电中的$.post选项。因为只有当您移交对象中的所有内容时才能指定此参数,请将调用更改为以下代码,以确保您不仅发送JSON数据,而且还相应地设置content-type标头:

$.post({
  url: "http://localhost:3000/usertoken/",
  data: {
    "token": "1212555",
  },
  contentType: "application/json",
  success: function (data, status) {
    // ...
  }
});

body-parser中间件仅在content-type标头指出您正在发送JSON数据时才会变为活动状态。