上传图像到Node.js图像“的未定义

对不起,我缩进了我是新来的node.js,试图上传图片到node.js检查很多的答案,如果我错了,请给我包装

1.bodyParser需要一个中间件来处理二进制文件,比如IMAGE,如果我不使用它,它会显示出来

undefine token

用Multer作为中间件,就像这样

 var multer = require('multer') var upload = multer({ dest:'/Node/file-upload/uploads/' }); app.post('/upload',upload.array(),songs.upload); 
  1. 按照这个 ,req.files是图像文件,req.body是文件名,所以我使用fs.readFile来读取文件
 fs.readFile(req.files.image.path, function (err, data) 

4.我需要一个文件path和文件名,我使用req.body

 var dirname = "/Node/file-upload/uploads/"; var newPath = dirname + req.body.image.filename; 

把这些数据写入目的地

 fs.writeFile(newPath, data, function (err) 

我不确定我错过了什么,我花了10个小时做这个请帮忙

它总是告诉我TypeError:不能读取未定义的属性“图像”

app.js

 var express = require('express') ,bodyParser = require('body-parser') ,app = express() ,multer = require('multer') ,binary = require('binary') ,fs = require('fs') ,util= require('util') ,http = require('http') ,multer = require('multer') ,upload = multer({ dest: '/Node/file-upload/uploads/' }); app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies. app.use(bodyParser.json({limit: '5mb'})); songs = require('./routes/route'); app.listen(3000, function () { console.log('Example app listening on port 3000!'); }); app.post('/upload',upload.array(),songs.upload); 

route.js

 var mongoose = require('mongoose'); var uri = "mongodb://xxxxxx:xxxxxxx@ds061365.mongolab.com:61365/aweitest"; mongoose.connect(uri); // we're connected! var db = mongoose.connection.db; var BSON = require('bson').BSONPure; var binary = require('binary'); var body = require('body-parser'); var fs = require('fs'); db.on('error', console.error.bind(console, 'connection errrrrrrrror:')); db.once('open', function() { console.log("mongodb is connected!!"); }); exports.upload = function(req, res) { console.log(req.body); fs.readFile(req.files.image.path, function (err, data){ var dirname = "/Node/file-upload/uploads/"; var newPath = dirname + req.body.image.filename; fs.writeFile(newPath, data, function (err) { if(err){ res.json({'response':"Error"}); }else { res.json({'response':"Saved"}); } }); }); }; 

错误

 TypeError: Cannot read property 'image' of undefined at exports.upload (c:\Users\awei\WebstormProjects\untitled\routes\girlshanlder.js:92:26) at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5) at next (c:\Users\awei\node_modules\express\lib\router\route.js:131:13) at multerMiddleware (c:\node_modules\multer\lib\make-middleware.js:18:41) at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5) at next (c:\Users\awei\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (c:\Users\awei\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5) at c:\Users\awei\node_modules\express\lib\router\index.js:277:22 at Function.process_params (c:\Users\awei\node_modules\express\lib\router\index.js:330:12) at next (c:\Users\awei\node_modules\express\lib\router\index.js:271:10) at jsonParser (c:\Users\awei\node_modules\body-parser\lib\types\json.js:107:37) at Layer.handle [as handle_request] (c:\Users\awei\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (c:\Users\awei\node_modules\express\lib\router\index.js:312:13) at c:\Users\awei\node_modules\express\lib\router\index.js:280:7 at Function.process_params (c:\Users\awei\node_modules\express\lib\router\index.js:330:12) 

upload.array()在你的app.js应该是

 upload.array('image',1) // 1 here is number of files you would upload 

在你的songs.upload中间件中,你会得到req.files.image作为一个数组,

所以你最好检查数组的长度,并遍历它来保存每个文件,或者如果你只是想保存1个文件,你可以做下面的事情。

例:

app.js

 app.post('/upload',upload.array('image',1),songs.upload); 

route.js

 var mongoose = require('mongoose'); var uri = "mongodb://xxxxxx:xxxxxxx@ds061365.mongolab.com:61365/aweitest"; mongoose.connect(uri); // we're connected! var db = mongoose.connection.db; var BSON = require('bson').BSONPure; var binary = require('binary'); var body = require('body-parser'); var fs = require('fs'); db.on('error', console.error.bind(console, 'connection errrrrrrrror:')); db.once('open', function() { console.log("mongodb is connected!!"); }); exports.upload = function(req, res) { console.log(req.body); fs.readFile(req.files.image[0].path, function (err, data){ var dirname = "/Node/file-upload/uploads/"; var newPath = dirname + req.body.image.filename; fs.writeFile(newPath, data, function (err) { if(err){ res.json({'response':"Error"}); }else { res.json({'response':"Saved"}); } }); }); };