如何检索使用 CURL 传递的 NodeJS 中的 POST 数据?
Posted
技术标签:
【中文标题】如何检索使用 CURL 传递的 NodeJS 中的 POST 数据?【英文标题】:How to retrieve POST data in NodeJS that was passed using CURL? 【发布时间】:2017-12-26 20:09:31 【问题描述】:我正在尝试使用 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
我尝试使用这样的节点检索我的数据参数:
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
如何在 node 中检索我通过 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
【问题讨论】:
把app.use(express.bodyParser());
放在开头有什么作用吗?
@J.Chen 我已经知道了:/ 我会将该信息添加到问题中
app.use(express.urlencoded());
呢?
我不知道如何读取节点中的数据,但数据在 POST 正文中,以 application/x-www-urlencoded 格式编码。如果您找到请求正文,请参阅此处以解析它***.com/a/8486188/1067003
@J.Chen 我现在开始工作了!你是对的,对象方法有帮助!我把CURL命令中的两个-H
选项去掉,改成JSON形式,然后在服务端解析JSON!现在可以使用了,非常感谢^-^
【参考方案1】:
尝试添加 json body parser 中间件
const bodyParser = require('body-parser');
app.use(bodyParser.json());
【讨论】:
顺便说一句,我认为 express.bodyParser 已被弃用 对不起,我已经把这行加进去了。原来是我的 CURL 命令出了问题!不过谢谢!【参考方案2】:在@J.Chen 和@hanshenrik 的帮助下终于让它工作了!
如果我将 CURL 请求中 --data
的格式更改为 JSON 对象(如 'key':'value',...
)而不是字符串 (key=value&...
),
如果我从 CURL 请求中删除 -H "Accept: text/plain" -H "Content-Type: application/json"
,
然后我的nodeJS Application终于看到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;
...
);
【讨论】:
这已经很老了,但希望它有所帮助:我不得不更改引号:这没有:data="'content':'2022'"
,但这样做了:data='"content":"2022"'
以上是关于如何检索使用 CURL 传递的 NodeJS 中的 POST 数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用express [重复]在nodejs中将对象从服务器端传递到客户端
如何使用nodejs在IBM Db2的LIKE查询中传递参数?
使用 NodeJS,如何使用 Spring Security OAuth2 制作的 JWT 检索存储在 PostgreSQL 中的会话信息?