I'm trying to upload an image file using the Express NodeJS framework but it keeps throwing this error:
Express
500 TypeError: Cannot read property 'image' of undefined
Here's my app.js
:
var express = require('express');
var routes = require('./routes');
var uploads = require('./routes/uploads');
var http = require('http');
var path = require('path');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.bodyParser());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.post('/uploads', uploads.uploads);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
Here's upload.js
:
var fs = require("fs");
exports.uploads = function(req, res){
//console.log(req.files);
fs.readFile(req.files.image.path, function (err, data) {
console.log("Request handler upload was called");
var imageName = req.files.image.name;
console.log(imageName);
if(!imageName){
console.log("There was an error")
res.redirect("/");
res.end();
} else {
var newPath = __dirname + "/uploads/" + imageName;
fs.writeFile(newPath, data, function (err) {
res.redirect("/uploads/" + imageName);
});
}
});
}
I've tried the other answers on similar questions including using the bodyParser() function and setting the name parameter of input tag as 'image' in my index.jade.
Is there any other solution possible?