NodeJS中“ bodyParser.urlencoded({扩展:true}))和“ bodyParser.json()”的含义是什么?

时间:2019-04-07 11:17:43

标签: node.js

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

app.use(bp.json());
app.use(bp.urlencoded({ extended: true }));

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

有什么不同

7 个答案:

答案 0 :(得分:2)

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

  <input type="text" class="form-control" placeholder='Text' name="comment[text]" value="<%=comment.text%>">

这两行代码将帮助您直接生成对象,而无需麻烦地设置变量和创建自己的对象。如果将extended property设置为false,则不会生成该对象,并且会返回undefined,您可以自己尝试一下

答案 1 :(得分:1)

body-parser库的完整文档可以在here中找到。

bp.json()-解析json对象的中间件-选项here。可以找到源代码here

  

返回仅解析json并且仅查看请求的中间件   其中Content-Type标头与type选项匹配。这个解析器   接受主体的任何Unicode编码并支持自动   gzip压缩和deflate编码。

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

  

返回仅解析urlencoded主体并且仅外观的中间件   应Content-Type标头与type选项匹配的请求。   该解析器仅接受主体的UTF-8编码并支持   自动压缩gzip和deflate编码。

     

将包含已解析数据的新主体对象填充到   中间件(即主体)之后的请求对象。该对象将   包含键值对,其中值可以是字符串或数组   (当extended为false时)或任何类型(当extended为true时)。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

const express = require("express");

const app = express();

app.use(express.json());

app.use(express.urlencoded({ extended: true }));

扩展选项允许在使用查询字符串库(当为假)或 qs 库(当为真)解析 URL 编码数据之间进行选择。 “扩展”语法允许将丰富的对象和数组编码为 URL 编码格式,从而实现类似 JSON 的 URL 编码体验。有关详细信息,请参阅 qs 库 here

默认为 true,但不推荐使用默认值。请研究 qs 和 querystring 的区别并选择合适的设置。

答案 4 :(得分:0)

您不需要在 express 中使用 require("body-parser")。因为来自 v4 的 express 实现了 body-parser。 你可以使用:

app.use(express.json())
app.use(express.urlencoded({extended: true}))

是一样的。

答案 5 :(得分:-1)

bodyparser具有以下一种模式,其中一种解析数据来自HTML表单

app.use(bp.urlencoded({ extended: true }));

,还可以解析文本和json之类的数据。

app.use(bp.text({extend:true});
app.use(bp.json({extend:true}); 

答案 6 :(得分:-2)

来自:https://apuntes.de/nodejs-desarrollo-web/body-parser/#gsc.tab=0

> Extended false utiliza la librería querystring mientras que true la librería qs. La sintaxis de extended:true permite el uso de otras características como rich objects y arreglos codificados dentro del formato URL-encoded.

意思是(大致翻译)

<块引用>
extended *false* utilizes the library 'querystring' while *true* uses
 'qs'. The sintax in -extended:true- allows the use of other
 characteristics like rich objets & code arrengenment inside the
 URL-encoded format