0

ノードjsとエクスプレスは初めてです。今日、最初の Node JS フォームを取得できましたが、期待どおりに機能しています。したがって、Expressで同じものを再作成したかったのですが、何らかの理由でプログラムで失敗しています。ヘッダーと本文を追跡することはできますが、何らかの理由で、Express が本文の処理方法を書き換える理由を理解できません。

私は自分の発見を追加しています。以下はコードです。これはエクスプレス コマンド ライン ツールで生成されたものです。これは app.js ファイルです。アップロード メソッドはデータを探しています。現時点では、ファイルのアップロードを処理していません。テキストを探しているだけです。

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);


    
/**custom stuff**/

app.post('/upload',function(req, res){
        console.log(req.header('Content-Type'));
        console.log(req.header('Host'));
        console.log(req.header('User-Agent'));

        console.log(req.body);
        res.send("Hello the response is "+req.body.username);
});

/** end**/

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

ここで、関数に対して curl 呼び出しを行います。

curl -d '{"username":"myname"}' -H 'Content-Type: application/x-www-form-urlencoded' http://localhost:3000/upload

そして、これらがヘッダーとボディです。 (ヘッダーは 3 行目で終わり、ボディは 4 行目で終わります)

application/x-www-form-urlencoded
localhost:3000
curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
{ '{"username":"myname"}': '' }
POST /upload 200 7ms - 36b

ここで、 Google Chrome 用のAdvanced Rest Client Appを使用しました。以下はヘッダーと本文です。

application/x-www-form-urlencoded
localhost:3000
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
{ username: 'myname from adv rest client app' }
POST /upload 200 5ms - 58b

したがって、私を混乱させていることの1つは、残りのクライアントアプリによって行われたリクエストの本文が適切に形成され、無傷であるのに、リクエストの本文が歪んでいる理由です。誰でもここでこれを手伝ってもらえますか。

ありがとうございました

4

1 に答える 1

0

curl使用されているデータ形式 (JSON) の間に不一致があるように見えるため、問題はコマンドのデータ/ヘッダーの組み合わせにある可能性があります。

-d '{"username":"myname"}'

指定された形式 (URL エンコード):

-H 'Content-Type: application/x-www-form-urlencoded'

URL エンコードされたデータの場合は、次を試してください。

-d 'username=myname'

また、ファイルのアップロードを扱っているため、それを設定する/オプションmultipart/form-dataを指定または使用することをお勧めします。-F--form

curl -F 'username=myname' http://localhost:3000/upload
于 2013-07-14T07:21:36.073 に答える