使用 multer 中间件表达动态路由

出于某些原因,我需要能够动态控制 routes express 使用(即,我需要能够根据设置为活动状态和不活动状态动态启用和禁用 URL/路径)。这就是为什么 express 只添加了 1 个路径:


this._express.all('*', (req, res, next) => {

            console.log(req.path);

            console.log(req.method)

            if (req.path in this._routes){

                this._routes[req.path](req, res, next);

            } else {

                res.sendStatus(404);

            }

        });

但是,我有一个向服务器发送文件的上传表单,使用 multer 的正常方法如下:



let upload = multer({ dest: 'uploads/' })

express.post('/upload', upload.single('file'), (req, res, next) => {

 // Do stuff and have access to req.file

});

但是,使用我当前的方法,我无法将 multer 中间件添加到动态路由中,并且我尝试在调用时在我的自定义路由代码中调用中间件/upload,但是,这无济于事。有没有办法避免必须硬传递我的路线来表达并仍然使用中间件,例如 multer(以及可能通过路线添加的其他人)而不是express.use()?


正如我之前所说,所有这些路由都可以通过管理面板启用/禁用/修改,我宁愿不必添加实际的路由来表达并让我自己的中间件处理请求的路由。


芜湖不芜
浏览 68回答 1
1回答

慕后森

您可以通过首先创建中间件函数在需要时动态调用 multer:const uploadSingle = upload.single('file');然后在任何路线中,您可以有条件地调用它:uploadSingle(req, res, next)如果您想在完成时了解自己,请传递您自己的回调而不是 next,它会在完成时调用您的回调。中间件不必在 Express 中注册,因此它可以被 Express 自动调用,当您希望它对给定的操作执行操作时,您可以使用自己的代码调用它(只需从请求处理程序中手动传递正确的参数)要求。这给了你完全的条件控制。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript