如何为同一API路由的不同方法分别启用或禁用bodyparser
同一API路由中针对不同方法配置bodyParser的方案
因为全局已经把bodyParser设为false满足POST的文件上传需求,要给DELETE方法启用请求体解析,不用额外中间件的话,直接用Node.js原生的流处理手动读取并解析请求体就行,不用拆分路由。
修改后的代码如下:
const handler = async (req, res) => { if (req.method === "POST") { // 原有的multipart form图片上传逻辑,保持不变 ... } else if (req.method === "DELETE") { // 手动读取请求体 let rawBody = ''; await new Promise((resolve, reject) => { req.on('data', chunk => rawBody += chunk.toString()); req.on('end', resolve); req.on('error', reject); }); // 根据请求的Content-Type解析body let parsedBody; try { // 如果是JSON格式请求 parsedBody = JSON.parse(rawBody); // 如果是表单编码格式,替换成下面这行: // parsedBody = require('querystring').parse(rawBody); } catch (err) { return res.status(400).json({ error: '请求体格式无效' }); } // 现在可以直接使用parsedBody里的变量了 console.log(parsedBody); ... } else { res.status(405).json({ data: null, error: "Method not allowed." }); return; }; }; export const config = { api: { bodyParser: false, }, }; export default handler;
关键说明
- 全局
bodyParser: false保留,确保POST方法能处理multipart表单上传 - DELETE方法通过原生的
req数据流事件读取请求体,再根据实际的Content-Type选择解析方式(JSON或表单编码) - 全程不需要额外安装中间件,也不用拆分路由文件,完全贴合现有代码结构
内容的提问来源于stack exchange,提问作者Tjm92
相关产品推荐
相关产品推荐

