【问题标题】:How does one format a path in order to take in a generic JSON object in Express.JS?如何格式化路径以便在 Express.JS 中接收通用 JSON 对象?
【发布时间】:2016-12-20 02:49:20
【问题描述】:

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

【问题讨论】:

  • 我的回答解决了问题吗?
  • 非常抱歉没有回来;直到现在都无法测试它!它确实有效!我已经包含了其他所有内容,唯一没有的行是 = app.use(bodyParser.json());。非常感谢!
  • 不用担心。谢谢,干杯!

标签: javascript json node.js http express


【解决方案1】:

正如man curl 所说-d--data 将数据添加到请求正文中。

-d, --data

(HTTP) 将 POST 请求中的指定数据发送到 HTTP 服务器, 就像浏览器在用户填写 HTML 时所做的一样 表单并按下提交按钮。这将导致 curl 通过 使用内容类型向服务器发送数据 应用程序/x-www-form-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 }));

注意:

如果你想发送正文有效负载,我建议在 curl 中使用 -X POST 而不是 GET,在代码中使用 app.post()

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

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多