app.use(multer({dest:'./ uploads /'})。single('photo'))return“Undefined is not a function”

我正在尝试使用MULTER上传文件

我使用最新的multer(v.0.18)

我这样configuration应用程序

var express = require('express') , multer = require('multer') , app = express() , routes = require('./routes'); app.use(multer({ dest: './uploads/', rename: function (fieldname, filename) { return filename+Date.now(); }, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path) done=true; } }).single('photo')); 

并且它一直返回“未定义不是函数”(指的是.single())

如果我删除.single到multer({ dest: 'uploads/' });

这个错误消息已经消失了,但是当然文件本身变成了未定义的,所以没有任何东西被上传。

工作了一天,男人! 显然需要帮助:'(

这是我如何使用multer ,希望这可以帮助你:(创build一个目录,并添加图片与它每个POST请求)。
这是在routes.js (或者你发布代码的文件名):

 var storage = multer.diskStorage( { destination: function (req, file, cb) { var destFolder =__dirname + '/../uploads/' + req.params.id; //create folder if does not exists if (!fs.existsSync(destFolder)) { fs.mkdirSync(destFolder); } //set folder where files will be populated cb(null, destFolder) }, filename: function (req, file, cb) { //set the names file within the folder //as the original name of the file cb(null,file.originalname); } }); 

然后我使用一个服务( fileUploadService.js )来调用它,如下所示:

 app.service('fileUpload', ['$http', function ($http) { this.uploadFileToUrl = function (files, uploadUrl) { var fd = new FormData(); for (var i = 0; i < files.length; i++) { fd.append('file', files[i]); } $http.post(uploadUrl, fd, { transformRequest: angular.identity, headers: { 'Content-Type': undefined } }) .success(function () { console.log("images files upload success"); }) .error(function () { console.log("images files upload fail"); }); } }]); 

这对我来说是完美的,希望你也能适应。 我明白这个挫折,因为这也让我花了一些时间才得到正确的答案。

您安装了旧版本。 您尝试使用的API仅在最新版本中引入(可能从v1.0.0开始)。

你可能会检查你的package.json是不是限制了什么版本的multer被安装。

我还应该指出,升级时需要multer修改一下multer选项: onFileUploadStartonFileUploadComplete不再存在,现在renamefilename (但是具有不同的asynchronous函数签名)。