afnetworking不能将body发送到node.js服务器,如何使用?

时间:2017-06-06 21:01:05

标签: node.js express afnetworking

AFNetworking设置了http主体,但是我的node.js服务器无法恢复正文。

使用NSURLConnection可以正常工作。

    //第一步,创建URL
NSURL *testurl = [NSURL URLWithString:@"http://192.168.1.7:1111/xx/xx/xxx"];
//第二步,创建请求
NSMutableURLRequest *testrequest = [[NSMutableURLRequest alloc]initWithURL:testurl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[testrequest setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
NSString *str = @"{'body':{'command':'xxxxx'}}";//设置参数
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[testrequest setHTTPBody:data];
//第三步,连接服务器

NSData *received = [NSURLConnection sendSynchronousRequest:testrequest returningResponse:nil error:nil];

NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];

NSLog(@"%@",str1);

afnetworking body不适用于node.js

NSDictionary *body =  @{ @"body": @{ @"command": @"xxxx"} };
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

AFURLSessionManager *afmanager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:[NSString stringWithFormat:@"http://192.168.1.7:1111/xx/xx/xxx"] parameters:nil error:nil];

req.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[req setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];


[[afmanager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {

    if (!error) {
        NSLog(@"Reply JSON: %@", responseObject);

        if ([responseObject isKindOfClass:[NSDictionary class]]) {
            //blah blah
        }
    } else {
        NSLog(@"Error: %@, %@, %@", error, response, responseObject);
    }
}] resume];

Node.js服务器,使用express。

req.on('data', function (chunk) {
    body.push(chunk);
});

enter image description here

此图片是查尔斯捕获的数据。看起来像是一样,我无法捕捉十六进制值来比较它们真的不同!!!!

1 个答案:

答案 0 :(得分:0)

在node.js端,如果您正在使用body-parser的JSON请求解析中间件并且检测到“application / json”请求,那么请求的解析内容将在{{1}上可用并且req.body不会发出任何数据(因为中间件已经消耗了它)。

对于您正在使用的任何中间件未处理的任何其他类型的请求,数据应按预期在req上提供。