const bp = require("body-parser");
const express = require("express");
const app = express();
app.use(bp.json());
app.use(bp.urlencoded({ extended: true }));
我需要知道他们在做什么。我找不到任何详细信息。你能帮助我吗? extended:true
和extended:false
答案 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