1

iOSアプリからNode.js/ExpressにデータをPOSTしようとしています。動作させることができません。アプリから試行すると、Node/Expressがリクエストを無視しているように見えます。ただし、WebブラウザでPOSTしようとしているのと同じURLに移動すると、Node/Expressが応答します。

これは、着信リクエストを処理する私のNode/Expressコードです。

var express = require('express');

var app = express.createServer();
app.configure(function(){
  app.use(express.bodyParser());
});

app.get('/', function(req, res) {
        res.write('nothing to see here...');
        res.end();
});

app.get('/test', function(req, res) {
        console.log('handling post!');
        console.log(JSON.stringify(req.body));
        res.end();
});

そして、これが私がJSONをノードにPOSTしようとしている方法です:

// Create request data.
NSString* jsonData = @"{\"test\" : \"someMoreTest\"}";
NSData* requestData = [jsonData dataUsingEncoding:NSUTF8StringEncoding];

// Create URL to POST jsonData to.
NSString* urlString = @"http://www.mysite.com/test";
NSURL* url = [NSURL URLWithString:urlString];

// Create request.
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url]; 
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: requestData];

// Send request synchronously.
NSURLResponse* response = [[NSURLResponse alloc] init];
NSError* error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

// Check result.    
if (error != nil)
{
    NSLog(@"submitted request!");
}
else {
    NSString* errorLogFormat = @"request failed, error: %@";
    NSLog(errorLogFormat, error);        
}

前述したように、ブラウザでhttp://www.mysite.com/testに移動すると、Nodeからのコンソール出力は次のようになります。
handling post!
{}

ただし、iOSアプリから投稿しようとすると、コンソールアプリが表示されません。これは、Nodeが着信POSTリクエストを認識しないかのようです。さらに厄介なことに、iOSアプリ側でエラーデータを取得できません。エラーはnilです。私がここで間違っていることについて何か考えはありますか?

4

1 に答える 1

4

Expressのルーティングフレームワークでは、app.get()はGETリクエストにのみ応答し、POSTは無視され、おそらく404になります。

代わりにpost()またはany()を使用できます。

Objective Cの部分についてコメントすることはできませんが、Nc -l 0.0.0.0 80(または別のポート)を提案します。o何が起こっているかを確認します。

于 2012-04-07T05:54:41.963 に答える