Node.js TypeError:无法读取未定义的属性“文件”

我只是在学习node.js,并且使用express和multer很难做一个简单的file upload。

这里是表格:

上传图片

在我的configure.js我有:

 app.use(express.static(path.join(__dirname, 'public'))); app.use(multer({dest:'../public/upload/temp'}).single('file')); 

image.js控制器:

 create: function(req, res) { var saveImage = function() { console.log(req.body); var possible = 'abcdefghijklmnopqrstuvwxyz0123456789', imgUrl = ''; for(var i=0; i < 6; i+=1) { imgUrl += possible.charAt(Math.floor(Math.random() * possible.length)); } var tempPath = req.files.file.path, //<line 55 error ext = path.extname(req.files.file.name).toLowerCase(), targetPath = path.resolve('./public/upload/' + imgUrl + ext); if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') { fs.rename(tempPath, targetPath, function(err) { if (err) throw err; res.redirect('/images/' + imgUrl); }); } else { fs.unlink(tempPath, function () { if (err) throw err; res.json(500, {error: 'Only image files are allowed.'}); }); } }; saveImage(); }, 

不过,当我尝试上传图片时出现此错误:

 TypeError: Cannot read property 'file' of undefined at saveImage (/home/pc/node-dev/test-proj/controllers/image.js:55:37) at module.exports.create (/home/pc/node-dev/test-proj/controllers/image.js:76:9) at Layer.handle [as handle_request] (/home/pc/node-dev/test-proj/node_modules/express/lib/router/layer.js:95:5) at next (/home/pc/node-dev/test-proj/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/home/pc/node-dev/test-proj/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/pc/node-dev/test-proj/node_modules/express/lib/router/layer.js:95:5) at /home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:277:22 at Function.process_params (/home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:330:12) at next (/home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:271:10) at urlencodedParser (/home/pc/node-dev/test-proj/node_modules/body-parser/lib/types/urlencoded.js:95:37) 

当我loginreq对象时, file不在那里:

 { title: 'myimage', description: 'something' } 

其实这个片段只是我在本书中读到的一个稍微修改过的版本,而这个版本正在使用过时的express-3。 所以基本上我只是更新了一下multer一部分。

我想知道这里有什么问题,以及如何解决这个问题。

你正在使用upload.single ,你应该使用req.file而不是req.files 。 要上传多个文件,请使用upload.array

请注意,您在req.file之后不需要另一个.file req.file 。 如果您使用upload.single req.file是上传的文件。