1

これは、投稿リクエストを nodejs バックエンドに送信するための私のコードです。

CLLocation* location = [locationManager location];
CLLocationCoordinate2D coord = [location coordinate];
NSMutableURLRequest *request =
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://50.63.172.74:8080/points"]];
//[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
NSDictionary* jsonDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:coord.latitude], @"lat", [NSNumber numberWithFloat:coord.longitude], @"lng", nil];//dictionaryWithObjectsAndKeys:coord.latitude, nil]
NSString *postString;
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict
                                                   options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                     error:&error];

if (! jsonData) {
    NSLog(@"Got an error: %@", error);
} else {
   postString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
(void)[[NSURLConnection alloc] initWithRequest:request delegate:self];

エクスプレスを使用すると、サーバーに request.body が返されますが、次のようになります。

{ '{\n  "lat" : 0.0,\n  "lng" : 0.0\n}': '' } 

request.body.lat未定義として戻ってくるので、言うだけではアクセスできません。体を次のようにしたい:

{ "lat":0.0, "lng":0.0}

エクスプレスを使用してそれを行う方法について何か考えはありますか?

4

2 に答える 2

0

The problem is that after you use NSJSONSerialization to obtain a NSData object containing your JSON data, you then create postString from that data. Eliminate that unnecessary step, and just do:

[request setHTTPBody:jsonData];

And you should get the expected JSON in your server-side code.

于 2013-03-31T01:33:29.950 に答える