2017-07-20 196 views
0

我想通过CURL命令将一些参数传递给我的本地主机(这是使用nodejs),但我的本地主机没有正确读取它们。如何检索使用CURL传递的NodeJS中的POST数据?

我做我的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
  • 卷曲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'))); 

而且我尝试了一些其他的卷曲变化:

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.Chen我已经有了:/我将这个信息添加到 – Kayvar

+1

那里'app.use(express.urlencoded());'? –

回答

2

终于得到它的帮助工作@ hanshenrik!

如果我改变--data的格式在我的卷曲请求是JSON对象的(如{'key':'value',...})而不是一个字符串(key=value&...),

,如果我删除-H "Accept: text/plain" -H "Content-Type: application/json"从CURL请求,

然后我的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

尝试从@ J.Chen并添加JSON解析器身体中间件

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

顺便说一句,我认为express.bodyParser已弃用 –

+0

对不起,我已经在这里广告这一行。原来,这是我的CURL命令,这是问题!谢谢你! – Kayvar

相关问题