bodyParser.urlencoded({extended: ...})
我的研究告诉我,如果扩展:true,那么你可以解析嵌套对象,或者通常是任何类型.但是,如果设置extended:false,则只能解析字符串或数组.但是什么呢
app.use(bodyParser.json())
是否正确?我的意思是,是的…我知道文档提到它解析json.但我仍然感到困惑.我注意到设置扩展的应用程序:true不要使用bodyParser.json().但扩展的应用程序:false倾向于使用bodyParser.json().为什么是这样?最后,两个应用都能够解析json.
其次是推荐的方法?
解决方法
身体解析器提取传入请求流的整个身体部分,并将其暴露在req.body上,使其更容易接触.你本身不需要它,因为你可以自己做所有的事情.然而,它很可能会做你想要的,并为您节省麻烦.
说明
body-parser给你一个中间件,它使用nodejs / zlib来解压缩传入的请求数据,如果它是压缩的,并且stream-utils / raw-body等待“解析它”之前的请求体的完整的原始内容(这意味着如果你不会使用请求体,你只是浪费了一些时间).
使用原始内容后,身体解析器将使用四种策略之一进行解析,具体取决于您决定使用的特定中间件:
bodyParser.raw():实际上并不解析正文,而是刚刚在缓冲区req.body上显示缓存的内容.
bodyParser.text():以纯文本形式读取缓冲区,并将生成的字符串暴露在req.body上.
bodyParser.urlencoded():将文本解析为URL编码数据(浏览器倾向于将表单数据从常规表单设置为POST),并将结果对象(包含键和值)暴露在req.body上.
bodyParser.json():将文本解析为JSON,并将结果对象公开在req.body上.
只有将req.body设置为期望的内容,它才会调用堆栈中的下一个中间件,然后可以访问请求数据,而无需考虑如何解压缩并解析它.
bodyParser.urlencoded({extended:true})
现在,这是中间件在express中的默认值.那么这个中间件有什么用呢?
在这里,当你点火POST请求时,它将被编码,只能包含{key:value}对象的对象形式,或只能包含一个简单的json格式的字符串.
bodyParser.urlencoded({extended:false})何时,我们将此值更改为false,我们清楚地表示,url可以包含url中的任何格式/类型的文件.所以准备好了因此,它使用qs库来解码url.