如何格式化一个path,以便接收Express.JS中的通用JSON对象?

以下是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并使我的JSONinput有效,但我想知道的是,如果我可以采取任何对象JSON传递给用户? 换句话说,如果我的json有一个额外的领域呢? 这是否需要一个全新的快递处理程序? 如果这是不可能的,这是由于安全问题还是这只是非常糟糕的devise? 谢谢

正如man curl所说, -d--data将数据添加到请求的主体中。

-d, – 数据

(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像浏览器在用户填写HTML表单并按下提交button时所做的一样。 这将导致curl使用内容typesapplication / x-www-form-urlencoded将数据传递给服务器。 比较-F,–form。

-d,–data与–data-ascii相同。 –data-raw几乎是一样的,但没有@字符的特殊解释。 要发布纯二进制数据,您应该使用–data-binary选项。 要对表单字段的值进行URL编码,您可以使用–data-urlencode。

所以,你需要一个像body-parser这样的包来parsing它。

npm install body-parser一样安装它,并将这些行添加到您的代码中,您的问题将得到解决。

 var bodyParser = require("body-parser"); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); 

注意:

如果你想发送主体有效负载,我build议在你的代码中使用-X POST而不是GET来代替curl和app.post()

另外请注意错字:curl是对/persons但代码有app.get('/person',更正其中任何一个。