Koa中间件ctx.request.body为何是字符串?

作者站长头像
站长
· 阅读数 11

koa 中间件获取的 ctx.request.body 的typeof为什么会是字符串呢

这边是使用了koa-body解析body数据

下面是index.js 引入koa-body

const Koa = require('koa');
const { koaBody } = require('koa-body');

const userRouter = require('../routers/user.route');

const app = new Koa();

app.use(koaBody());

app.use(userRouter.routes());

const errHandler = require('./errHandler')
// 统一的错误处理
app.on('error', errHandler)

module.exports = app 

route文件中,post 传 ctx.request.body给中间件 (打印发现是字符串)

const Router = require('koa-router');

const router = new Router({ prefix: '/user' });

//中间件
const { userValidator, verifyUser, crpytPassword } = require('../middleware/user.middleware')

const { register, login } = require('../controller/user.controller')

//GET user
// router.get('/', async (ctx, next) => {
//     ctx.body = 'user';
// });

//POST 
// 合法性 合理性 加盐 register
router.post('/register', userValidator, verifyUser, crpytPassword, register)

router.post('/login', login)


module.exports = router;

中间件打印是字符串

//加密
const crpytPassword = async (ctx, next) => {
  console.log(typeof ctx.request.body,'---------------');
  return
  const { password } = ctx.request.body

  const salt = bcrypt.genSaltSync(10)
  // hash保存的是 密文
  const hash = bcrypt.hashSync(password, salt)
 
  ctx.request.body.password = hash

  await next()
}

Koa中间件ctx.request.body为何是字符串?

回复
1个回答
avatar
test
2024-06-23

这个要看请求你传的Content-Type类型

fetch("http://localhost:7777/deploy?d=1111",{
    method:'POST', //请求类型
    headers:{ //请求头
        "Content-Type":'application/json'
    },
    body:JSON.stringify({ a:33333}), //请求参数
}).then(function(res){
    return res.json();
})
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容