如何在Strapi控制器中获取原始请求体?属性读取为undefined问题排查
问题核心原因
ctx.request.body[unparsed]存储的是未解析的原始请求体字符串,并非结构化JS对象,直接读取.email/.name属性必然返回undefined- 你已开启Strapi内置的JSON解析能力,解析后的结构化参数直接存在
ctx.request.body中,不需要额外读取unparsed内容
修复方案
- 移除控制器中不需要的
koa-body/unparsed.js引入及相关逻辑 - 直接读取
ctx.request.body上的字段,可增加一层兼容逻辑应对特殊场景下的解析异常 - 确认发送POST请求时携带了
Content-Type: application/json请求头
修改后的控制器代码如下:
module.exports = { index: async (ctx) => { const body = ctx.request.body; // 兼容特殊场景下body未自动解析为对象的情况 const parsedBody = typeof body === 'string' ? JSON.parse(body) : body; await strapi.plugins["email"].services.email.send({ to: parsedBody.email, from: "test@asd.com", subject: "testing Subject", text: `Heloooo ${parsedBody.name}`, }); ctx.send("Email Sent"); }, };
如果修改后仍然无法读取参数,可在控制器中打印console.log(typeof ctx.request.body, ctx.request.body)确认body的数据类型,根据输出结果可以进一步定位解析异常原因。
内容的提问来源于stack exchange,提问作者Nikasv
相关产品推荐
相关产品推荐

