Express注册路由req.body为空 无法获取JSON请求数据报错
问题根因
Express框架默认不会自动解析application/json格式的请求体,你没有在服务中配置对应的请求体解析中间件,导致路由处理函数中拿到的req.body是空对象{},解构得到的password值为undefined,传入bcrypt.hash方法时就会触发Illegal arguments: undefined, string错误。
修复步骤
- 确认你的Express版本,4.16.0及以上版本可以直接使用内置的JSON解析中间件,在路由挂载之前添加如下配置(配置写在服务入口文件,通常是
server.js/app.js):
const express = require('express') const app = express() // 解析JSON格式请求体,必须写在注册路由的代码之前 app.use(express.json()) // 之后再注册你的业务路由,示例: // app.use('/api/register', require('./routes/register'))
- 如果你的Express版本低于4.16.0,需要先安装
body-parser依赖完成解析:- 安装依赖:
npm install body-parser- 在入口文件路由挂载前添加配置:
const bodyParser = require('body-parser') app.use(bodyParser.json()) - 配置完成后重启Node服务,再次发送测试请求即可正常获取
req.body中的JSON参数,加密逻辑也会正常执行。
注意:请求体解析中间件必须放在所有路由注册逻辑之前,否则配置不会对路由生效,依然会出现拿不到请求体的问题。
内容的提问来源于stack exchange,提问作者Talha
相关产品推荐
相关产品推荐

