如何格式化路径以获取Express.JS中的通用JSON对象?

时间:2016-08-13 03:45:30

标签: javascript json node.js http express

以下是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有一个额外的字段怎么办?这需要一个全新的快递处理程序吗?如果这是不可能的,这是由于安全问题还是这个设计真的很糟糕?感谢

1 个答案:

答案 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',更正其中任何一个。