Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用app.use的multer配置返回TypeError_Javascript_Node.js_Express_Multer - Fatal编程技术网

Javascript 使用app.use的multer配置返回TypeError

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

我试图在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: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”)上载到服务器中的/uploads
req.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')-允许上传带有表单fieldName
photo
的单个文件。我相信我已经解决了。我会把我的作品作为答案。谢谢你的回复!我几乎可以肯定,文档是在我处理这个问题时更新的,因此我使用了不正确的语法lol