如何在NodeJS中检索使用CURL传递的POST数据?

时间:2017-07-20 22:47:17

标签: javascript node.js express

我正在尝试使用CURL命令将一些参数传递给我的localhost(使用nodejs),但我的localhost没有正确读取它们。

我正在向我的localhost发送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

我尝试用这样的节点检索我的数据参数:

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

如何检索我在节点中使用curl程序传递的参数?

================== 版本

  • 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')));

我还尝试了其他一些卷曲变种:

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

2 个答案:

答案 0 :(得分:2)

最后得到了@J.Chen和@hanshenrik的帮助!

如果我将CURL请求中--data的格式更改为 JSON对象(如{'key':'value',...})而不是字符串(key=value&...) ,

如果我请求 删除 -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 :(得分:1)

尝试添加json body解析器中间件

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