gpt4 book ai didi

javascript - 如何有选择地将中间件(multer)插入到新的 Express 路由器中

转载 作者:行者123 更新时间:2023-12-03 03:59:08 25 4
gpt4 key购买 nike

在一个较旧的项目中,我设置了一个路由器并使用 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 生成器来制作 Node 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;

您还应该能够将其放在发布回调之前:

router.route('/doSomething')
.post(upload, (...args) => controller.doSomething(...args));

关于javascript - 如何有选择地将中间件(multer)插入到新的 Express 路由器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44808558/

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