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

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()
}

image.png

阅读 1.2k
1 个回答

这个要看请求你传的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();
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题