以下是Js,Node.js和Express.js
的一般用法app.get('/person', function(req, res, next){
console.log(req.body);
}
我正在发送当前的curl命令
curl -v -H "Content-Type: application/json" -X GET -d '{"name":"me", "phone":"123"}' localhost:1337/persons
我假设我的console.log()将打印{}一个空容器。现在从阅读Express.js文档我知道我可以安排URL来接受参数:/ persons /:person / id /:id并使我的JSON输入有效,但我想知道的是我是否可以采取任何对象JSON由用户传递?换句话说,如果我的json有一个额外的字段怎么办?这需要一个全新的快递处理程序吗?如果这是不可能的,这是由于安全问题还是这个设计真的很糟糕?感谢
答案 0 :(得分:2)
由于man curl
表示-d
或--data
将数据添加到请求正文中。
-d, - data
(HTTP)将POST请求中的指定数据发送到HTTP服务器, 与用户填写HTML时浏览器的操作方式相同 表单并按下提交按钮。这将导致卷曲通过 使用content-type将数据发送到服务器 应用程序/ x-WWW窗体-urlencoded。比较-F, - form。
-d, - data与--data-ascii相同。 --data-raw几乎相同,但没有对@字符的特殊解释。发布 数据纯粹是二进制的,你应该使用--data-binary选项。 要对表单字段的值进行URL编码,您可以使用--data-urlencode。
因此,您需要一个像body-parser
这样的包来解析它。
像npm install body-parser
一样安装它,并将这些行添加到您的代码中,您的问题就会得到解决。
var bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
注意:
我建议您在卷曲中使用-X POST
而不是GET
,如果要发送正文有效负载,则建议在代码中使用app.post()
。
另请注意拼写错误:卷曲是/persons
,但代码app.get('/person',
更正其中任何一个。