什么是express.json()和express.urlencoded()?

时间:2014-04-24 03:15:54

标签: javascript node.js express

我在express.json()和express.urlencoded()上找不到任何文档。他们每个人到底做了什么?

5 个答案:

答案 0 :(得分:8)

以下说明应清除对express.json()express.urlencoded()以及body-parser的使用的疑问。我花了一些时间才弄清楚。

  1. 什么是中间件?正是那些在应用程序方法中处理请求并发送响应的方法/功能/操作。

  2. 在谈论express.json()express.urlencoded()时,请特别考虑POST请求(即.post请求对象)和PUT请求(即.put请求对象)

  3. 对于GET请求或DELETE请求,您不需要express.json()express.urlencoded()

  4. 您需要express.json()express.urlencoded()来进行POST和PUT请求,因为在这两个请求中,您都是发送数据(以某些数据对象的形式)到服务器,并且您要服务器接受或存储该数据(对象),该数据(对象)包含在该(POST或PUT)请求的正文(即req.body)中

  5. Express为您提供了中间件来处理请求正文中的(传入)数据(对象)。

    a。 express.json()是express中内置的一种方法,用于将传入的请求对象识别为 JSON对象。使用以下代码将这种方法称为应用程序中的中间件:app.use(express.json());

    b。 express.urlencoded()是express中内置的一种方法,用于将传入的请求对象识别为字符串或数组。使用以下代码将这种方法称为应用程序中的中间件:app.use(express.urlencoded());

  6. 或者,我建议使用 body-parser (这是一个NPM软件包)来执行相同的操作。它是由构建Express的同一位偷窥者开发的,旨在与Express配合使用。正文解析器曾经是express的一部分。考虑专门用于POST请求(即.post请求对象)和/或PUT请求(即.put请求对象)的正文解析器。

  7. 您可以在正文解析器中

    // calling body-parser to handle the Request Object from POST requests
    var bodyParser = require('body-parser');
    // parse application/json, basically parse incoming Request Object as a JSON Object 
    app.use(bodyParser.json());
    // parse application/x-www-form-urlencoded, basically can only parse incoming Request Object if strings or arrays
    app.use(bodyParser.urlencoded({ extended: false }));
    // combines the 2 above, then you can parse incoming Request Object if object, with nested objects, or generally any type.
    app.use(bodyParser.urlencoded({ extended: true }));
    

答案 1 :(得分:7)

jsonurlencoded中间件都是bodyParser的一部分。这就是README所说的:

  

bodyParser([选项])

     

返回分析jsonurlencoded的中间件。 options将传递给两个中间件。

     

bodyParser.json([选项])

     

返回仅解析json的中间件。选项包括:

     
      
  • strict - 仅解析对象和数组
  •   
  • limit< 1mb> - 最大请求正文大小
  •   
  • reviver - 传递给JSON.parse()
  •   
     

bodyParser.urlencoded([选项])

     

返回仅使用qs模块解析urlencoded的中间件。选项包括:

     
      
  • limit< 1mb> - 最大请求正文大小
  •   

答案 2 :(得分:5)

什么是中间件

要了解 express.json 和 express.urlencoded 的作用,您必须了解什么是中间件。

中间件是 expressJS 中的函数或方法,用于对向服务器发出的请求执行各种操作。

现在您应该知道如何使用 express 获取对路由的请求。

app.get("/api/houses", (req, res) => {
     console.log("Received request");
     res.send("houses")
   })

中间件的重要性

上面的代码是 express 如何处理 get 请求的典型示例。但是在您希望对向服务器发出的每个请求进行操作的情况下。您不希望在每条路线中都重复代码。

在这个阶段有一个中间件来救援。中间件就像每个请求的通用接收器。

app.use((req, res, next) => {
      console.log("Verifing request"); 
      next();
     })

上面是一个自定义中间件,它验证对我的服务器发出的每个请求,并根据请求的类型将广告发送到下一个适当的路由中间件。 (获取、发布、放置等)

内置中间件

现在 expressJS 已经有一些已经制作好的中间件,可以帮助开发人员执行一些繁琐的任务。比如将请求正文转换为 JSON 等等。

这些内置 ExpressJS 中间件的示例是

  • express.json()
  • express.urlencoded()

express.json() 是一个内置的 express 中间件,可以将请求正文转换为 JSON。

express.urlencoded() 就像 express.json() 将请求体转换为 JSON,它还执行一些其他功能,例如:将表单数据转换为 JSON 等。

答案 3 :(得分:4)

如果你问我“express.urlencoded({extended: false})express.json() 之间的区别是什么? "

好吧,区别在于

如果你使用 express.json() 它将解析来自 html post 表单的 post/fetch 请求 except 的正文

它不会解析来自 html post 表单的信息

<form action="/" method="POST">
    <input type="text" name="username">
    <button>Submit</button>
</form>

例如,如果您在表单中填写“dean_ilham”然后提交,express 不会知道其中的内容。

带有快速代码:

const express = require('express')
const app = express()

app.use(express.json())
// app.use(express.urlencoded({ extended: false }))
app.use(express.static("public"))


app.get("/", (req, res) => {
    res.sendFile("index.html")
})

app.post("/", (req, res) => {
    res.send(req.body)
})


const port = process.env.PORT || 3001
app.listen(port, () => {
    console.log(`Server Up in Port ${port}`);
})

点击提交后它会发送{}

但是如果您取消注释 app.use(express.urlencoded({extended: false})), 然后你会得到 {"username": "dean_ilham"}

所以区别在于 express.json() 是用于发布请求的正文解析器除了 html 发布表单和 express.urlencoded({extended: false} ) 是 html post 表单的正文解析器

答案 4 :(得分:-11)

四处寻找答案,所以...

如果要自定义,请使用express.json或express.urlencoded,它们都在express中内置了中间件功能。

如果要快速开发,请使用body-Parser。