节点在路由中的multer

我在我的app.js中做了如下操作:

var multer = require('multer'); app.use(multer({ dest: './public/img/profile/', rename: function (fieldname, filename) { return fieldname; }, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, limits: { files: 1 }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path) imageUploaded=true; } })); 

这工作,但我想设置一个精神的路线这些设置。 例如imageRoute.js,而不是在我的app.js。 但是,我应该使用,而不是app.use()比我不能访问我的路线中的应用程序。 我在我的app.js中创build路线,如:

  var imageRoutes = require('./routes/imageRoutes')(); app.use('/image', imageRoutes); 

imageRoutes.js

 module.exports = function(passport) { var that = this; // Modules var express = require('express'); var router = express.Router(); var fs = require('fs'); // Middleware: Checks if user is authenticated removed for more readable code router.post('/fileupload', that.ensureAuthenticated, function(req, res, next) { //setup multer here }); router.post('/fileupload2', that.ensureAuthenticated, function(req, res, next) { //setup multer here with a different destination path/filename etc }); return router; } 

我发现这个问题,但它并没有真正帮助我。

UPDATE

我现在编辑我的app.js:

  var multer = require('multer'); var imageRoutes= require('./routes/imageRoutes')(someRepo, multer); 

imageRoutes.js

 // POST: CREATE avatar router.post('/avatar', function(req, res) { router.use(multer({ dest: './public/img/profile/', rename: function (fieldname, filename) { return fieldname; }, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, limits: { files: 1 }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path) imageUploaded=true; console.log(req.files); res.redirect('/'); } })) }); 

我看到铬正在上传一个文件到100%,但它什么都不做。 它dosn't日志开始..或任何其他错误。

您可以将多个中间件/路由器传递给.use()

 var multer = require('multer'); var parseUploads = multer({ dest: './public/img/profile/', rename: function (fieldname, filename) { return fieldname; }, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, limits: { files: 1 }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path) imageUploaded=true; } }); // ... var imageRoutes = require('./routes/imageRoutes')(); app.use('/image', parseUploads, imageRoutes); 

如果您想将逻辑完全移至imageRoutes.js并且您的multer逻辑是特定于路由的 ,则可以执行如下操作:

 router.post('/avatar', multer({ dest: './public/img/profile/', rename: function (fieldname, filename) { return fieldname; }, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, limits: { files: 1 }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path) } }), function(req, res) { // Here you can check `Object.keys(req.files).length` // or for specific fields like `req.files.imageField` res.redirect('/'); });