为何在Express的body-parser中需将extended设为true以接收表单输入?
为什么要把
bodyParser.urlencoded的extended设为true才能正常接收表单输入? 先明确body-parser里urlencoded中间件的extended参数的核心作用:
- 当
extended: false时,中间件会用querystring库解析表单数据,这个库只能处理扁平键值对,比如username=zhangsan&age=25这种简单结构,完全没法解析嵌套字段(比如user[username]=zhangsan&user[age]=25)或者数组类型的表单输入(比如多个同name的复选框数据)。 - 当
extended: true时,中间件会切换为qs库解析数据,这个库支持解析嵌套、数组类的复杂表单结构,能适配更多灵活的表单输入场景。
你遇到必须设为true才能正常接收的情况,大概率是你的表单里包含了嵌套字段、数组类型的输入(比如带分组的表单项、多选项复选框)。如果这时用false,querystring解析不了这类复杂结构,会导致部分数据丢失或解析错误,自然没法正常接收表单内容。
另外补充:Express 4.16.0及之后的版本,官方已经把body-parser的核心功能整合进了Express本身,你可以直接用app.use(express.urlencoded({ extended: true })),不用单独安装body-parser包。
内容的提问来源于stack exchange,提问作者Umair Ali Khan
相关产品推荐
相关产品推荐

