express中req没有body的问题

发布时间 2023-04-09 00:03:43作者: 明月下

在使用express框架做后端时,遇到问题,req不存在body

route.post('/',async (req,res) => {
    // 这里的req.body为undefined
})

查询资料后发现,跟app.js的设置有关。

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

express.urlencoded({ extended: false }) 是一个 Express 中间件,用于解析 application/x-www-form-urlencoded 格式的请求体。这种格式常用于处理 HTML 表单数据。
extended 参数是一个布尔值,用于设置解析器的选项。如果将其设置为 false,则解析器将使用 Node.js 原生的 querystring 模块解析请求体,将键值对解析为对象的形式,例如:{ name: 'John', age: '30' }。
如果将其设置为 true,则解析器将使用第三方库 qs 来解析请求体。这个库支持一些比较特殊的解析选项,例如解析包含嵌套对象和数组的数据,例如:{ person: { name: 'John', age: '30' }, hobbies: ['reading', 'music'] }。不过,使用这个选项会导致解析性能下降,因此在不需要使用这些特殊选项的情况下,建议将 extended 参数设置为 false。
需要注意的是,express.urlencoded() 中间件必须在处理 POST 请求之前使用,否则请求体将无法被正确解析。

而我这次出现问题就是因为将引入路由的语句 const routes = require('./routes') routes(app) 放在了这个设置之前。所以注意设置的调用顺序。