gpt4 book ai didi

node.js - Express body-parser 不解析多个路由器中间件请求

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:02 25 4
gpt4 key购买 nike

我想从路由中的多个中间件访问 req.body。但我似乎无法找到一种方法从我的自定义中间件中获取已解析的正文数据。

例如:

let mymiddleware = (req, res, next) => {
console.log(req.body); //<- undefined
next();
}

router.post('/', mymiddleware,
multer({fileFilter: filefilter,storage:storage}).any(),//<-this file uploader middleware retrieves req.body without problem.
function (req, res) {
console.log(req.body); //<- parsed body showing here.
});

我错过了什么吗?为什么使用多个中间件时 req.body 无法解析?(是的,我相信我已经正确设置了我的主体解析器,因为它在处理程序中工作)

(编辑:有关此问题的更多详细信息)

这是我在 app.js 中任何 app.use 路由器之前的主体解析器设置:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
else res.redirect('/');
}

app.use('/console/create_album', ensureAuthenticated, create_album);

以及我在前端的表单:

<form enctype="multipart/form-data" action='/console/create_album' method='post'>
<!---Just some text inputs, and textarea, file inputs are here -->
</form>

当我不在 router.post 上使用“mymiddleware”中间件时,文件和正文解析的数据可以成功检索,没有任何问题。

最佳答案

您已经为两种数据类型(json 和 url 编码)配置了 body-parser。 body-parser 中间件将检查每个传入请求,并且仅当请求是您为其配置的这两种类型之一时才对请求执行任何操作。

但是,当您上传文件时,它不是这两种类型之一,因此主体解析器不会读取和解析它。

另一方面,multer() 中间件需要文件上传的类型,因此它会为您读取、解析和处理正文。

仅供引用,body-parser doc具体是这样说的:

This does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules:

busboy and connect-busboy

multiparty and connect-multiparty

formidable

multer

而且,您的表单指定 enctype="multipart/form-data" 是多部分的。

关于node.js - Express body-parser 不解析多个路由器中间件请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50206296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com