我正在为用户在uiTextField中输入的任何内容执行HTTP POST。 Text在NSString中捕获,然后添加到NSDictionary中。然后它被转换为JSON,最后转换为NSData,作为HTTP Body的UTF8。
如果用户输入了纯文本,这非常有效。但是,如果用户输入了表情符号,那么它将一直运行到HTTP POST本身。
从NSString到NSDict到JSON的转换都很好。它甚至可以作为UTF8转换为NSData。但是当调用POST时会抛出错误。这是我的代码:
实际上,当我尝试将JSON转换为NSData(UTF8)时,我就可以将其作为HTTP Body传递给我从我的应用程序到后端的POST。这是它抛出错误的区域:
NSString *jsonPushData = [self mutDictToJson:pushData];
NSLog(@"sendMessage:jsonPushData has: %@",jsonPushData);
//NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]];
NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]];
NSMutableURLRequest *request =
[[NSMutableURLRequest alloc] initWithURL: restApiUrl
cachePolicy: NSURLRequestUseProtocolCachePolicy
timeoutInterval: 10.0];
NSLog(@"sendMessage:requestBodyData has: %@ with length: %lu",requestBodyData, [jsonPushData length]);
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[requestBodyData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: requestBodyData];
returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
以下是node.js中的代码:
// get all the insert (accessed at POST http://localhost:8080/api/insert)
router.route('/sendMessage')
.post(function(req, res) {
console.log('-- Entered Send Message -- at:' + getDateTime());
var message = req.body.message;
console.log("tag is: " + req.body.tag + " message is: "+message)
azureNh.sendPushViaApns(req.body.tag, req.body.message);
res.write("Response from Post function");
res.end("end connection");
});
当我发送纯文本时,这可以按预期工作。但是当我通过HTTP POST从iphone发送表情符号时,它会在node.js中点击此方法并立即抛出以下错误:它不会打印第一行的事件&#34; - 输入sendMessage - &#34;:< / p>
SyntaxError: Unexpected end of input
at Object.parse (native)
at parse (/home/azureuser/node_modules/body-parser/lib/types/json.js:88:17)
at /home/azureuser/node_modules/body-parser/lib/read.js:108:18
at done (/home/azureuser/node_modules/body-parser/node_modules/raw-body/index.js:239:14)
at IncomingMessage.onEnd (/home/azureuser/node_modules/body-parser/node_modules/raw-body/index.js:285:7)
at IncomingMessage.g (events.js:199:16)
at IncomingMessage.emit (events.js:104:17)
at _stream_readable.js:908:16
at process._tickCallback (node.js:355:11)
我没有准备好POST以处理表情符号。但我没有在Xcode中看到POST尝试的任何错误。
我迷失了,请告知如何解决这个问题。
提前致谢。
答案 0 :(得分:1)
我能够解决这个问题。我在Xcode中做了一个小改动,允许node.js成功接受HTTP post并正确处理。 HEre是我改变的代码行:
旧方法:
NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]];
将其更改为:
NSData *requestBodyData = [jsonPushData dataUsingEncoding:NSUTF8StringEncoding];
现在消息和表情符号按预期到达。