2014-10-09 48 views
1

我想实现一个简单的服务器使用Express 4.0和解析与BodyParser消息。要测试我的服务器,我使用Postman。NodeJs,Express,BodyParse和JSON

使用x-www-form-urlencoded作为消息模式它没有问题,但改变消息与JSON我不能单独使用BodyParse单独数据。

这里是我的代码:

app.use(bodyParser.json()); 

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

var router = express.Router() 

router.get('/', function (req, res){ 

    res.json({message: "nd..."}) 
}) 

var sendRoute = router.route('/msg') 
sendRoute.post(function(req, res){ 

    // HERE IS THE PROBLEM****************************** 
// It works with urlencoded request but not with JSON 
    var dataparam1 = req.body.param1 
    var dataparam2 = req.body.param2 
    **************************************************** 
    . 
    . 
    . 
}) 

,让我们说这是JSON数据,我得到形式的请求:

[{"param1":"This is the param1", 
    "param2":"This is the param2" 
}] 

这有什么错我的代码?我怎样才能得到带有JSON格式的params?

+0

当你发送JSON请求时,console.log(req.headers ['content-type'])'在你的POST路由中显示什么? – mscdex 2014-10-09 12:51:41

+0

嗯......'text/plain; charset = UTF-8' – MatterGoal 2014-10-09 12:56:40

+0

在postman中,我设置了raw和JSON。 – MatterGoal 2014-10-09 12:57:01

回答

4

如果您的请求正文是作为JSON字符串发送的,那么您必须通过内容类型标头告诉您的应用程序。

  1. 在邮差,单击Headers按钮,旁边的下拉列表,选择方法和URL params按钮。 (右上)
  2. 表格将展开,在左侧字段中填写Content-Type,在右侧填写application/json
  3. 提交请求。

bodyParser可以处理多种类型的数据,但它必须知道您提交的格式。它不会尝试猜测数据类型。

在textarea上方的下拉菜单(根据您的评论,它现在设置为'JSON'),您在填充请求主体时仅切换语法突出显示,但不会设置Content-Type标头为你。

+0

如果传入的对象不能被解析,那么你的JSON是无效的。你可能没有引用键('{“key”:“val”} vs'{key:“val”}')。他们在JSON中不*可选。 *编辑:我看到你已经删除了你的评论,所以我想它的工作? : - )* – RikkusRukkus 2014-10-09 14:44:08