我正在尝试使用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_name
,old_db
,new_db
总是 undefined
。
此外,req.body
是一个空对象{}
而req.url
只是/auto
如何检索我在节点中使用curl程序传递的参数?
================== 版本
================== 更新
我的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 :(得分: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());