Javascript Express中间件(multer)在单独的文件中
我能够将一个非常简单的中间件(isAuthenticated)移到一个外部中间件文件中,但是我很难将我的multer上传移到上面。我刚刚学会了如何将它们移动到不同的文件中,所以可能是obviusJavascript Express中间件(multer)在单独的文件中,javascript,node.js,express,Javascript,Node.js,Express,我能够将一个非常简单的中间件(isAuthenticated)移到一个外部中间件文件中,但是我很难将我的multer上传移到上面。我刚刚学会了如何将它们移动到不同的文件中,所以可能是obvius routes/index.js var middleware = require('../middleware/common'); var isAuthenticated = middleware.isAuthenticated; var upload = middleware.multerSetup;
routes/index.js
var middleware = require('../middleware/common');
var isAuthenticated = middleware.isAuthenticated;
var upload = middleware.multerSetup;
...
router.post('/updateuser',
upload,
...,
function (req, res, next) {
res.redirect('/dashboard');
}
);
--
错误:
routes\index.js:108
upload.single('upl'),
^
TypeError: upload.single is not a function
at Object.<anonymous> (C:\Users\Tyler\WebstormProjects\volunteer\volunteerApp\routes\index.js:108:12)
routes\index.js:108
upload.single('upl'),
^
类型错误:upload.single不是一个函数
反对。(C:\Users\Tyler\WebstormProjects\Organizer\OrganizerApp\routes\index.js:108:12)
您的multer中间件设置错误。您的Middleware.multerSetup
是一个中间件函数,然后调用upload.single
来设置multer(然后再也不调用它,请求保持挂起状态)。将multer upload设置移到自定义中间件之外,让您的模块仅从upload.single
导出返回函数
例如:
Middleware = {
...
multerSetup: upload.single('upl')
...
}
明白了!只需要在routes/index.js中将upload定义为一个函数
var upload = middleware.multerSetup();
您遇到了什么错误或问题?我知道每个人都主张使用不同的文件来做每件小事。我允许我的文件树慢慢扩展,这样我在每个文件中都有足够的内容可以工作,但不会太多以至于变得凌乱。您不需要将multer上载设置移动到单独的文件中。只需将它移到同一文件中的自定义中间件功能之外。
var upload = middleware.multerSetup();