2017-07-20 6 views
0

CURLコマンドでlocalhost(nodejsを使用しています)にいくつかのパラメータを渡そうとしていますが、localhostが正しく読み込めません。私はこのように私はlocalhostに私のPOSTリクエストやってCURLを使用して渡されたNodeJSのPOSTデータを取得する方法は?

curl --data "db_name=auto&old_db=Lab.tar.gz&new_db=627999E00_10.tgz" 
    --noproxy localhost 
    -H "Accept: text/plain" 
    -H "Content-Type: text/plain" 
    -X POST http://localhost:8084/auto 

をそして私はこのようなノードで自分のデータのparamsを取得しよう:

app.post('/auto',function(req,res){ 
    var db_name=req.body.db_name; //undefined 
    var old_db=req.body.old_db; //undefined 
    var new_db=req.body.new_db; //undefined 
    ... 
}); 

しかしdb_nameold_dbnew_dbありますすべて常にundefinedです。また

req.bodyは空のオブジェクト{}

そしてreq.urlは私がノードでの私のカールプログラムで渡されたパラメータを取得する方法だけ/auto

あるのですか?

================== バージョン

  • NodeJS v6.5.0
  • ExpressJSのv3.14.0
  • CURLのv7.22.0

================== アップデート

マイExpressJs構成は以下の通りです:

app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.urlencoded()); 
app.use(app.router); 
app.use(express.static(_path.join(__dirname, '..', 'Client'))); 

はまた、私はいくつかの他のカールのバリエーションを試してみました:JSONボディパーサーミドルウェアを追加する

curl --noproxy localhost 
    -H "Accept: text/plain" 
    -H "Content-Type: application/json" 
    -X POST 
    -d "{'db_name':'auto','old_db':'Lab.tar.gz','new_db':'627999E00_10.tgz'}" 
    http://localhost:8084/auto 
+0

を入れています 'app.use(express.bodyParser());'初めに何かを? –

+1

@ J.私はすでにそれを持っていた:/私は質問にその情報を追加します – Kayvar

+1

'app.use(express.urlencoded());'はどうでしょうか? –

答えて

2

が最後にそれがJ.Chen @からの助けを借りて動作するようになったと@hanshenrik!

私の代わりに文字列(key=value&...)の私のCURL要求JSONオブジェクトなるように({'key':'value',...}など)、

--dataのフォーマットを変更し、I 場合は、から-H "Accept: text/plain" -H "Content-Type: application/json"を削除した場合

私のnodeJSアプリケーションは、最後にreq.bodyのパラメータを見ます。

curl --noproxy localhost 
    -X POST 
    -d "{'db_name':'auto','old_db':'Lab.tar.gz','new_db':'627999E00_10.tgz'}" 
    http://localhost:8084/auto 

そして、私のNodeJSコードは次のとおりです:

だから私の最終的なコードがある

app.post('/auto',function(req,res){ 
    var parseMe = Object.keys(req.body)[0]; 
    var parsedParams = JSON.parse(parseMe); 

    var db_name=parsedParams.db_name; 
    var old_db=parsedParams.old_db; 
    var new_db=parsedParams.new_db; 
    ... 
}); 
1

てみ

const bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 
+0

btw私はexpress.bodyParserは非難されていると思います –

+0

申し訳ありません、私はすでにこのラインをそこに広告します。それが問題だった私のCURLコマンドだったことが分かります!ありがとう、結構です! – Kayvar

関連する問題