Error: parser error, 18 of 135 bytes parsed (node.js Objective-C)の対処方法


Error: parser error, 18 of 135 bytes parsed という、expressのエラーが出た場合の対処法です。(Postのみ)
原因は、BodyParserの仕様にクライアントがそっていない可能性があります。

■解決策

プロパティを追加する際には、form-data/nameの後のコロンやダブルクオーテーションのチェック、改行コードに\r\nを必ず使う。

[objc]
//リクエスト名の追加
[body appendData:[[NSString stringWithFormat:@”Content-Disposition: form-data; name=\”%@\” \r\n”,keyName] dataUsingEncoding:NSUTF8StringEncoding]];
[/objc]

■確認方法

node.js 側のexpressのBodyParserを外し、req.bodyを文字列に変換して確認することができます。

■Good

[objc]
//結果用のデータを作成する。
NSMutableData *body = [NSMutableData data];
NSString *boundary = @”—–123456—–“;
//boundaryの追加
[body appendData:[[NSString stringWithFormat:@”–%@\r\n”, boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//リクエスト名の追加
[body appendData:[[NSString stringWithFormat:@”Content-Disposition: form-data; name=\”%@\” \r\n”,keyName] dataUsingEncoding:NSUTF8StringEncoding]];
//改行
[body appendData:[@”\r\n” dataUsingEncoding:NSUTF8StringEncoding]];
//データの追加
[body appendData:bodyData];
//改行
[body appendData:[@”\r\n” dataUsingEncoding:NSUTF8StringEncoding]];
//閉じる
[body appendData:[[NSString stringWithFormat:@”–%@–\r\n”, boudary] dataUsingEncoding:NSUTF8StringEncoding]];

[/objc]

■Bad

改行コードに\nを使ってしまう。

[objc]

//結果用のデータを作成する。
NSMutableData *body = [NSMutableData data];
NSString *boundary = @”—–123456—–“;
//boundaryの追加
[body appendData:[[NSString stringWithFormat:@”–%@\r\n”, boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//リクエスト名の追加
[body appendData:[[NSString stringWithFormat:@”Content-Disposition: form-data; name=\”%@\” \n”,keyName] dataUsingEncoding:NSUTF8StringEncoding]];
//改行
[body appendData:[@”\n” dataUsingEncoding:NSUTF8StringEncoding]];
//データの追加
[body appendData:bodyData];
//改行
[body appendData:[@”\n” dataUsingEncoding:NSUTF8StringEncoding]];
//閉じる
[body appendData:[[NSString stringWithFormat:@”–%@–\r\n”, boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[/objc]

■bad2

nameにクオーテーションをつけない。

[objc]
//結果用のデータを作成する。
NSMutableData *body = [NSMutableData data];
NSString *boundary = @”—–123456—–“;
//boundaryの追加
[body appendData:[[NSString stringWithFormat:@”–%@\r\n”, boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//リクエスト名の追加
[body appendData:[[NSString stringWithFormat:@”Content-Disposition: form-data; name=%@ \r\n”,keyName] dataUsingEncoding:NSUTF8StringEncoding]];
//改行
[body appendData:[@”\r\n” dataUsingEncoding:NSUTF8StringEncoding]];
//データの追加
[body appendData:bodyData];
//改行
[body appendData:[@”\r\n” dataUsingEncoding:NSUTF8StringEncoding]];
//閉じる
[body appendData:[[NSString stringWithFormat:@”–%@–\r\n”, boudary] dataUsingEncoding:NSUTF8StringEncoding]];
[/objc]

SNSでもご購読できます。

コメントを残す

*