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

use*_*695 16 javascript node.js express

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

Kea*_*ral 37

下面是应该清除疑虑的解释express.json()并express.urlencoded()和使用身体解析器。我花了一些时间才弄清楚。

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

  2. 在讨论express.json()并express.urlencoded()具体考虑POST请求(即.post请求对象)和PUT请求(即.put请求对象)时

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

  4. 你需要express.json()和express.urlencoded()针对POST和PUT请求,因为在这两个请求你发送的数据(一些数据对象的形式)发送到服务器和你所要求的服务器来接受或存储的数据(对象),其被封闭在req.body(POST或PUT)请求的正文(即)

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

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

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

  6. 另外,我建议使用body解析器(它是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 }));
    
    Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是Express> = 4.16.0,则在`express.json()`和`express.urlencoded()`方法下重新添加了主体解析器。 (11认同)
  • 主体解析器已被弃用。我们应该使用内置的快速方法。 (7认同)
  • app.use(bodyParser.urlencoded({扩展:true}));`不将app.use(bodyParser.json());和app.use(bodyParser.urlencoded({扩展:false})合并);`:它不处理application / json,而仅处理application / x-www-form-urlencoded。`extended`选项用于指定[bodyParser是否应使用`qs`(`extended:true`)或`querystring`(`extended:false`)解析URL编码的数据](https://github.com/ expressjs / body-parser#extended)。 (4认同)

Pau*_*aul 11

在json和urlencoded中间件是两部分bodyParser.这就是README所说的:

bodyParser([选项])

返回分析json和的中间件urlencoded.将options被传递到两个中间件.

bodyParser.json([选项])

返回仅解析的中间件json.选项是:

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

bodyParser.urlencoded([选项])

返回仅urlencoded使用qs模块解析的中间件.选项是:

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

  • 只需记住带有选项“extended = false”的 bodyParser.urlencoded 将使用库 [querystring](https://nodejs.org/api/querystring.html) 例如:“bodypParser.urlencoded({ Extended: false }) / /querystring` 和库 [qs](https://www.npmjs.com/package/qs#readme) 如果扩展选项设置为 true 例如:`bodypParser.urlencoded({ Extended: true }) //qs ` 来源[此处](https://github.com/expressjs/body-parser#bodyparserurlencodedoptions) (3认同)

小智 11

如果你问我“有什么区别之间express.urlencoded({延长:假})和express.json() ”

嗯,区别在于

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

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

<form action="/" method="POST">
    <input type="text" name="username">
    <button>Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

例如,如果你用“dean_ilham”填写表格然后提交它,表达不会知道身体里面是什么。

使用快递代码:

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}`);
})
Run Code Online (Sandbox Code Playgroud)

它会{}在您点击提交后发送。

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

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

  • 是的,但是 fetch 不仅仅发送 json 格式的数据;它还可能发送 urlencoded 数据 (2认同)

Moh*_*eid 11

此中间件在 Express v4.16.0及更高版本中可用。

\n
app.use(express.urlencoded({ extended: true}))\n
Run Code Online (Sandbox Code Playgroud)\n

Extended[boolean]:此选项允许选择使用查询字符串库(当为 false 时)或 qs 库(当为 true 时)解析 URL 编码数据。\xe2\x80\x9cextended\xe2\x80\x9d 语法允许将丰富的对象和数组编码为 URL 编码格式,从而通过 URL 编码提供类似 JSON 的体验

\n

快递文档:- https://expressjs.com/en/api.html#express.urlencoded

\n


Pra*_*shi 11

当您使用 post 方法提交表单(默认 content-type = application/ x-www-form-urlencoded )时,需要express.urlencoded(),并且您需要使用 req.body 访问该表单数据,如果您不这样做使用它 req.body 将是未定义的。


小智 6

什么是中间件

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

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

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

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

中间件的重要性

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

在这个阶段,中间件可以派上用场。中间件就像每个请求的通用接收器。

app.use((req, res, next) => {
      console.log("Verifing request"); 
      next();
     })
Run Code Online (Sandbox Code Playgroud)

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

内置中间件

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

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

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

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

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