Javascript 使用app.use的multer配置返回TypeError
我试图在app.js文件(使用node.js/express)中配置multer,以允许用户上传图像。我在app.js中有以下代码:Javascript 使用app.use的multer配置返回TypeError,javascript,node.js,express,multer,Javascript,Node.js,Express,Multer,我试图在app.js文件(使用node.js/express)中配置multer,以允许用户上传图像。我在app.js中有以下代码: //various require statements for passport, cookie parser, etc.. var multer = require('multer'); var app = express(); app.use(multer({dest:'./uploads/'})); 当我尝试运行应用程序时,我得到TypeError
//various require statements for passport, cookie parser, etc..
var multer = require('multer');
var app = express();
app.use(multer({dest:'./uploads/'}));
当我尝试运行应用程序时,我得到TypeError:app.use()需要中间件函数
我理解这些问题可能需要更多关于我的应用程序的上下文,所以如果需要更多信息,请告诉我
多谢各位
编辑: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/'})
返回对象,而不是中间件函数。如果我们查看代码模块,我们将看到有三个middlware函数:
multer({dest:'./uploads/'}).single(...)
multer({dest:'./uploads/'}).array(...)
multer({dest:'./uploads/'}).fields(...)
试试其中一个。值得称赞的是@stdob——为我指引了正确的方向。我正在查看的multer文档似乎在我工作时已更新,因此我错误地使用了代码
Multer应该与其中间件功能一起使用。因此,正确使用该软件包的方法如下:
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”创建一个post路由,并将单个文档(通过表单名“postImg”)上载到服务器中的/uploadsreq.file
包含带有文件信息(如文件路径)的JSON。请记住,这不会自动删除上载的文件
更多信息可以在这里找到:这样就可以了
app.use(multer({dest:'./public/images/uploads'}).any());
在黑暗中拍摄,但是在您需要multer变量后,它是否具有正确的值?(你有没有从样本中漏掉任何与multer有关的行?)你使用的是什么multer和express版本?据我所知,除了我发布的那些行之外,没有其他行引用multer。我使用的是express 4.12.4和multer 1.0.0(我相信lol是从package.json获得这些版本的)。让我用更多的代码编辑我的问题好吧,我有点困惑为什么npm页面在他们的示例中有类似于我的代码的东西。我应该使用上面列出的功能之一吗?等等,我链接的页面似乎最近更新了,我没有刷新页面。你能提供一个正确使用
multer({dest:'./uploads/'})的例子吗?
奇怪的是,它可能是过时的文档?还是我错了。无论如何例如:app.use(multer({dest:'./uploads/'}).single('photo')代码>-允许上传带有表单fieldNamephoto
的单个文件。我相信我已经解决了。我会把我的作品作为答案。谢谢你的回复!我几乎可以肯定,文档是在我处理这个问题时更新的,因此我使用了不正确的语法lol