`app.use(bodyParser.json())`有什么作用?

Gra*_*ful 42 json express body-parser

对于:

bodyParser.urlencoded({extended: ...})
Run Code Online (Sandbox Code Playgroud)

我的研究告诉我,如果extended: true,那么你可以解析嵌套对象,或者通常是任何类型.但是,如果设置extended: false,则只能解析字符串或数组.但那是什么......

app.use(bodyParser.json())
Run Code Online (Sandbox Code Playgroud)

是什么意思?我的意思是,是的......我知道文件提到它解析了json.但我仍然感到困惑.我注意到设置的应用程序extended: true根本不使用bodyParser.json().但是extended: false倾向于使用的应用程序bodyParser.json().为什么是这样?在一天结束时,两个应用程序都能够解析json.

其次,这是推荐的方法吗?

Gra*_*ful 70

好了,相反的是我以前认为,进一步的研究表明,extended: trueapp.use(bodyParser.json())可以一起使用.所以它不仅仅是extended: false使用它.该语句app.use(bodyParser.json())将独立使用,无论您将扩展名设置为truefalse.

  • app.use(bodyParser.json()) 基本上告诉系统你想要使用json.

  • bodyParser.urlencoded({extended: ...}) 基本上告诉系统你是否想要使用简单的算法进行浅层解析(即错误)或者使用复杂算法进行深度解析,以便处理嵌套对象(即true).

有关示例,查看文档(即https://expressjs.com/en/guide/migrating-4.html).

  • 我感激不尽.谢谢. (7认同)

tri*_*cot 6

URL编码和JSON编码都允许将(嵌套)对象转换为字符串,但格式不同.URL编码的字符串通常不是有效的JSON字符串.

一个应用程序可以使用一种编码方法,另一种应用程序可以 只要他们不混合两者,它就会起作用.


Mal*_*til 5

bodyParser.json 返回只解析 json 的中间件。此解析器接受正文的任何​​ Unicode 编码,并支持 gzip 和 deflate 编码的自动膨胀。

包含解析数据的新主体对象填充在中间件之后的请求对象上(即 req.body)。