如何有选择地将中间件(multer)插入新的快速路由器
How to optionally insert middleware (multer) into new express router
在一个较旧的项目中,我设置了一个路由器并使用 multer 来处理文件上传。我可以像这样有选择地在某些路由上使用 multer 中间件:
var router = express.Router();
var multer = require('multer');
var upload = multer({dest:'./tmp/'}).single('file');
router.post('/:id/foo', upload, function(req, res, next) {
// req.file is the path to a file that can be read from tmp
// ...
});
最近,我使用了一个 yeoman 生成器来制作节点 api 应用程序,我也想添加通过 multer 上传文件的功能。但是我如何在这个使用新方法设置路由的新应用程序结构中做到这一点?
它的 index.js 文件如下所示:
// ...
const routes = require('./routes');
//...
app.use('/', routes);
在 routes.js 中它是这样做的:
const Router = require('express').Router;
const router = new Router();
const user = require('./model/SomeModel/router');
//...
module.exports = router;
并且在 ./model/SomeModel/router.js 中,我按照文件中已有的模式添加了一些路由,使用 ...args 如下:
// In some of these, I want to insert multer, but where?
router.route('/doSomething')
.post((...args) => controller.doSomething(...args));
module.exports = router;
我认为我的问题是 ...args 语法。如何使用参数将 multer 插入到中间件链中?
您可以在特定路由器上安装中间件:
router.use(upload) // runs for all routes mounted under this call
router.route('/doSomething')
.post((...args) => controller.doSomething(...args));
module.exports = router;
您还应该能够将它放在 post 回调之前:
router.route('/doSomething')
.post(upload, (...args) => controller.doSomething(...args));
在一个较旧的项目中,我设置了一个路由器并使用 multer 来处理文件上传。我可以像这样有选择地在某些路由上使用 multer 中间件:
var router = express.Router();
var multer = require('multer');
var upload = multer({dest:'./tmp/'}).single('file');
router.post('/:id/foo', upload, function(req, res, next) {
// req.file is the path to a file that can be read from tmp
// ...
});
最近,我使用了一个 yeoman 生成器来制作节点 api 应用程序,我也想添加通过 multer 上传文件的功能。但是我如何在这个使用新方法设置路由的新应用程序结构中做到这一点?
它的 index.js 文件如下所示:
// ...
const routes = require('./routes');
//...
app.use('/', routes);
在 routes.js 中它是这样做的:
const Router = require('express').Router;
const router = new Router();
const user = require('./model/SomeModel/router');
//...
module.exports = router;
并且在 ./model/SomeModel/router.js 中,我按照文件中已有的模式添加了一些路由,使用 ...args 如下:
// In some of these, I want to insert multer, but where?
router.route('/doSomething')
.post((...args) => controller.doSomething(...args));
module.exports = router;
我认为我的问题是 ...args 语法。如何使用参数将 multer 插入到中间件链中?
您可以在特定路由器上安装中间件:
router.use(upload) // runs for all routes mounted under this call
router.route('/doSomething')
.post((...args) => controller.doSomething(...args));
module.exports = router;
您还应该能够将它放在 post 回调之前:
router.route('/doSomething')
.post(upload, (...args) => controller.doSomething(...args));