Express.js 中的“bodyParser.urlencoded({extended: true }))”和“bodyParser.json()”是什么意思?

dgk*_*nca 37 node.js

const bp = require("body-parser");
const express = require("express");
const app = express();

app.use(bp.json());
app.use(bp.urlencoded({ extended: true }));
Run Code Online (Sandbox Code Playgroud)

我需要知道他们在做什么。我找不到任何详细信息。你能帮助我吗?和之间有什么区别extended:trueextended:false

Nin*_*liu 36

body-parser是一个 NPM 包,它在处理程序之前解析中间件中传入的请求正文,可在req.body属性下使用。

app.use(bp.json())查看Content-Type: application/json存在标头的请求,并将基于文本的 JSON 输入转换为 .js 下的 JS 可访问变量req.bodyapp.use(bp.urlencoded({extended: true})对 URL 编码的请求执行相同的操作。对象将包含任何类型的值而不仅仅是字符串的extended: true精确req.body值。


Iva*_*vic 27

body-parser可以在此处找到库的完整文档。

bp.json()- 用于解析 json 对象的中间件 - 可以在此处找到选项。源代码可以在这里找到。

返回仅解析 JSON 并仅查看 Content-Type 标头与类型选项匹配的请求的中间件。此解析器接受正文的任何​​ Unicode 编码,并支持 gzip 和 deflate 编码的自动膨胀。

bp.urlencoded({ extended: true })- 用于从 URL 解析正文的中间件。可以在此处找到选项。源代码可以在这里找到。

返回仅解析 {urlencoded} 主体并仅查看 Content-Type 标头与类型选项匹配的请求的中间件。此解析器仅接受主体的 UTF-8 编码,并支持 gzip 和 deflate 编码的自动膨胀。

包含解析数据的新主体对象填充在中间件之后的请求对象上(即 req.body)。该对象将包含键值对,其中值可以是字符串或数组(当扩展为假时)或任何类型(当扩展为真时)。

  • 这篇文章中的答案都不能令人满意。如果您想要正确的答案,请参阅这篇文章 - /sf/ask/2042282581/#29177740 (6认同)

小智 24

在 Express >= 4.16 中,正文解析器已在express.json()方法下重新添加。\n上述问题的替换是

\n
const express = require("express");\n\nconst app = express();\n\napp.use(express.json());\n\napp.use(express.urlencoded({ extended: true }));\n
Run Code Online (Sandbox Code Playgroud)\n

扩展选项允许选择使用查询字符串库(当为 false 时)或 qs 库(当为 true 时)解析 URL 编码数据。\xe2\x80\x9cextended\xe2\x80\x9d 语法允许将丰富的对象和数组编码为 URL 编码格式,从而通过 URL 编码提供类似 JSON 的体验。有关更多信息,请参阅此处的qs 库。

\n

默认为 true,但使用默认值已被弃用。请研究 qs 和 querystring 之间的区别并选择适当的设置。

\n


小智 13

您不需要使用require("body-parser")快递。因为 Express 从 v4 开始就实现了 body-parser。你可以使用:

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

这是相同的。


小智 6

它可以帮助您从表单输入创建对象

  <input type="text" class="form-control" placeholder='Text' name="comment[text]" value="<%=comment.text%>">
Run Code Online (Sandbox Code Playgroud)

这两行将帮助您直接生成一个对象,而无需设置变量和创建您自己的对象。如果您将扩展属性设置为 false,它将不会生成该对象并返回 undefined。您自己试试就知道了

  • 感谢您以人类可读的方式将其分解 (3认同)