2016-03-04 45 views
1

我使用"body-parser": "1.15.0""express": "4.13.4" 而我试图从http POST请求的body部分得到json数据。身体解析器读取JSON数据后node.js的表达

这是我的代码:

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

var app = express(); 
///Set Connection config 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 
var port = process.env.PORT || 3000; 

//Body parser 
app.use(bodyParser.json(({ type: 'application/*+json', 
          inflate: false 
         }))); 

app.use(bodyParser.urlencoded({ 
    extended: true 
}));//Read post info 

app.use(function(req, res, next) { 

    //Response config 
    res.charset = 'utf-8'; 
    res.set({ 
    'Content-Type': 'application/json' 
    }); 

    console.log("body: " + JSON.stringify(req.body)); 

}); 

// Routing 
require('./routes')(app,io);//define routes 

//Connect 
server.listen(port, function() { 
    console.log('Server listening at port %d', port); 
}); 

的问题是,我得到req.bodyundefined,我已经做了一些搜索,找出的parser需求的定义是routes定义之前。 post请求需要有"Content-Type" : "application/json"

我有,但仍然得到undefined ....

如果我使用app.use(bodyParser.text());并改变它工作正常的"Content-Type" : "plain/text",与"Content-Type" : "x-www-form-urlencoded"它也可以...

但我需要使用"Content-Type" : "application/json"任何人都可以帮助我吗?

在此先感谢。

编辑:数据从Objective-C的

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url 
                 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
                timeoutInterval:60.0]; 
[request setHTTPMethod:method]; 
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

NSDictionary* sendInfo = [[NSDictionary alloc]initWithObjectsAndKeys: 
           @"test", @"user" , nil]; 

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:sendInfo options:NSJSONWritingPrettyPrinted error:nil]; 
NSString *jsonDataString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
NSData *requestData = [jsonDataString dataUsingEncoding:NSUTF8StringEncoding]; 
[request setHTTPBody: requestData]; 

//Capturing server response 
NSError* error; 
NSHTTPURLResponse* response; 
NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
+0

你是如何发送JSON服务器? –

+0

嗨,我从ios应用发送帖子,并使用先进的REST客户端(铬插件)来测试,但得到相同的结果...我测试头正在发送,他们有正确的内容类型 – Jordan

+0

看到我的答案和尝试它,我已经回答假设你的客户端将发送纯'json',如果是这样它应该工作 –

回答

0

OK,发现问题。 ..但我无法解释为什么会发生这种情况.. 要开始阅读json的身体,我不得不改变方法外径:

app.use(功能(REQ,RES,下一个)

为这一个:

app.use( '/',bodyParser.json(),函数(REQ ,水库,下一个)

而且每一件事情开始工作

+0

你能帮我解决这个问题吗? :http://stackoverflow.com/questions/41167585/node-js-unable-to-read-post-json-data-in-my-webhook?noredirect=1#comment69586756_41167585 – codeinprogress

0

尝试更换代码中的以下行派:

app.use(bodyParser.json(({ type: 'application/*+json', 
          inflate: false 
         }))); 

有了以下几点:

app.use(bodyParser.json()); 
+0

随着这一变化我得到一个错误400错误访问(SyntaxError:意外的令牌)我发送的JSON是{ “user”:“teste”} – Jordan