使用app.use的configuration器会返回TypeError

我正在尝试在我的app.js文件(使用node.js / express)中configurationmulter以允许用户上传图像。 我在app.js中有以下代码:

//various require statements for passport, cookie parser, etc.. var multer = require('multer'); var app = express(); app.use(multer({dest:'./uploads/'})); 

当我尝试运行应用程序时,我得到TypeError: app.use() requires middleware functions

我知道这个问题可能需要一些关于我的应用程序的上下文,所以请让我知道是否需要额外的信息。

谢谢

编辑:更多来自app.js的代码:

 var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var bodyParser = require('body-parser'); var methodOverride = require('method-override'); var session = require('express-session'); //var fs = require('fs'); var multer = require('multer'); //Mongo Database var mongo = require('mongodb'); var monk = require('monk'); var db = monk('localhost:27017/test-api'); //Instagram-API var api = require('instagram-node').instagram(); //Cookie Manager var cookieParser = require('cookie-parser'); //Grid //var Grid = require('gridfs-stream'); //Passport var passport = require('passport'); var InstagramStrategy = require('passport-instagram').Strategy; var routes = require('./routes/index'); //var users = require('./routes/users'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(multer({dest:'./uploads/'})); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(methodOverride()); app.use(session({secret: 'keyboard cat', resave: false, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session()); app.use(express.static(path.join(__dirname, 'public'))); // Make our db accessible to our router app.use(function(req,res,next){ req.db = db; next(); }); app.use('/', routes); 

问题是multer({dest:'./uploads/'})返回对象,而不是中间件函数。 如果我们看代码模块,我们会看到有三个中间件函数:

 multer({dest:'./uploads/'}).single(...) multer({dest:'./uploads/'}).array(...) multer({dest:'./uploads/'}).fields(...) 

尝试其中之一。

值得信赖@ stdob–引导我走向正确的方向。 我正在查看的multer文档似乎在我工作时已更新,因此我错误地使用了该代码。

应该使用Multer的中间件function。 因此使用这个包的正确方法如下:

 var multer = require('multer'); var upload = multer({dest:'uploads/'}); var cpUpload = upload.single('postImg'); router.post('/createpost', cpUpload, function(req,res){ console.log(req.file); res.redirect('/'); } 

此代码片段将为“/ createpost”创build一个后路由,并将单个文档(通过表单名“postImg”)上传到服务器上。 req.file包含带有文件信息的JSON(如文件path)。 请记住,这不会自动摆脱上传的文件。

更多信息可以在这里find: https : //www.npmjs.com/package/multer

这会做

 app.use(multer({dest:'./public/images/uploads'}).any());