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

Javascript 如何在使用CURL传递的NodeJS中检索POST数据?,javascript,node.js,express,Javascript,Node.js,Express,我试图用CURL命令将一些参数传递给我的localhost(使用nodejs),但是我的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/pla

我试图用CURL命令将一些参数传递给我的localhost(使用nodejs),但是我的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
    ...
});
我尝试使用如下节点检索我的数据参数:

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\u name
old\u db
new\u db
都是
未定义的

而且,
req.body
是一个空对象
{}

req.url
只是
/auto

如何检索在节点中随curl程序传递的参数

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

  • nodejsv6.5.0
  • expressjsv3.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

尝试添加json主体解析器中间件

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

在@J.Chen和@hanshenrik的帮助下,它终于开始工作了

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

如果我从CURL请求中删除
-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; 
    ...
});

是否使用(express.bodyParser())
一开始做什么?@J.Chen我已经有了:/I将把这些信息添加到关于
app.use(express.urlencoded())的问题中?我不知道如何读取节点中的数据,但数据在帖子正文中,以application/x-www-urlencoded格式编码。如果您找到请求正文,请参阅此处以进行解析@J.Chen我现在就可以开始工作了!你是对的,对象方法有帮助!我删除了CURL命令中的两个
-H
选项,并将其更改为JSON格式,然后在服务器端解析JSON!现在可以工作了,非常感谢^-^顺便说一句,我认为express.bodyParser不受欢迎。对不起,我已经在那里登了这行广告。原来是我的CURL命令出了问题!谢谢你!