Nicht Lesen-Eigenschaft nicht definiert, wenn leere Datei hochladen

Ich bin mit Node.js (v0.10.25) und Express (4.13.1) und mit jade anstelle von HTML. Ich habe ein Anmeldeformular, wo ein Benutzer kann registrieren und hochladen profileimage.

Alles Prima funktioniert, außer wenn ich lade ein leeres Bild, dann bekomme ich die folgende Fehlermeldung:

Cannot read property 'profileimage' undefined

APP.JS

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var methodOverride = require('method-override');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var multer = require('multer');
var flash = require('connect-flash');
var expressValidator = require('express-validator');
var mongo = require('mongodb');
var mongoose = require('mongoose');
var db = mongoose.connection;


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');

//Handle file Uploads
app.use(multer({dest:'./uploads/'}).single('singleInputFileName'));

//uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

//Handle Express Sessions
app.use(session({
        secret: 'secret',
        saveUninitialized: true,
        resave: true
        }));


//Passport
app.use(passport.initialize());
app.use(passport.session());      

//Vallidator
app.use(expressValidator({
  errorFormatter: function(param, msg, value) {
      var namespace = param.split('.')
      , root    = namespace.shift()
      , formParam = root;

    while(namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param : formParam,
      msg   : msg,
      value : value
    };
  }
}));



app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


//Flash
app.use(flash());

app.use('/', routes);
app.use('/users', users);

//catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

//error handlers

//development error handler
//will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

//production error handler
//no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


module.exports = app;

USER.JS

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

router.get('/Registreren', function(req, res, next) {
  res.render('Registration', { title: 'Registreren' });
});

router.get('/Aanmelden', function(req, res, next) {
  res.render('Aanmelden', { title: 'Aanmelden' });
});

router.post('/Registreren', function(req, res, next){
    //Get form value
    console.log('Bericht in behandeling ...')
    var username = req.body.username;
    var email = req.body.email;
    var password = req.body.password;
    var password_confirm = req.body.password_confirm;

    console.log('username: ' + username);
    console.log('email: ' + email);
    console.log('password: ' + password);
    console.log('password_confirm: ' + password_confirm);
    console.log('FIRST TEST: ' + JSON.stringify(req.files));
    console.log('SECOND TEST: ' + req.files.profileimage);

    //Check for image field
    if (req.files.profileimage){
        console.log('Uploading file....');

        //File Info 
        var profileImageOrginalName     = req.files.profileimage.orginalname;
        var profileImageName            = req.files.profileimage.name;
        var profileImageMimetype        = req.files.profileimage.mimetype;
        var profileImagePath            = req.files.profileimage.path;
        var profileImageExt             = req.files.profileimage.extension;
        var profileImageSize            = req.files.profileimage.size;
    } else{
         console.log('profileImageFile not found....');
        //Set default image
        var profileImageName = 'noimage.png';
    }

    //Form validation
        req.checkbody('username','Gebruikersnaam is verplicht').notEmpty();
        req.checkbody('email','email is verplicht').notEmpty();
        req.checkbody('email','email is niet geldig').isEmail();
        req.checkbody('username','Gebruikersnaam is verplicht').notEmpty();
        req.checkbody('password','Gebruikersnaam is verplicht').notEmpty();
        req.checkbody('password_confirm','Wachtwoorden zijn niet gelijk').equals(req.body.password);
        req.checkbody('username','Gebruikersnaam is verplicht').notEmpty();

    //Error handling
    console.log('Error handling....');
    var errors = req.valdidationErrors();

    if (errors){
        console.log('Form Errors....');
        res.render('Registreren',{
            errors: errors,
            username: username,
            email: email,
            password: password,
            password_confirm: password_confirm
        });
    }else {
          console.log('No Form Errors....');
        var newUser = new User({
               username: username,
               email: email,
               password: password,
               profileimage: profileImageName })

        //Create User
//       User.createUser(newUser, function(err,user){
//           if(err) throw err;
//           console.log(user);
//       });

    //Succes message
    req.flash('succes','Je bent succesvol aangemedld');
    res.location('/');
    res.redirect('/');
    }

    });



module.exports = router;

Was ich gelesen habe und ausprobiert:

  1. https://github.com/danialfarid/ng-file-upload/issues/185

  2. nodejs und express Fehler beim hochladen von Datei "cannot read property "undefined"

  3. TypeError: Cannot read property 'Bild' von undefined

Auf dem USER.JS Sie geben das Ergebnis "undifned" auf den ersten test und zweiten test versagt er völlig. Auch bekomme ich nog cosole.Protokoll für die else-Anweisung in der

if (req.files.profileimage){
        console.log('Uploading file....');

        //File Info 
        var profileImageOrginalName     = req.files.profileimage.orginalname;
        var profileImageName            = req.files.profileimage.name;
        var profileImageMimetype        = req.files.profileimage.mimetype;
        var profileImagePath            = req.files.profileimage.path;
        var profileImageExt             = req.files.profileimage.extension;
        var profileImageSize            = req.files.profileimage.size;
    } else{
         console.log('profileImageFile not found....');
        //Set default image
        var profileImageName = 'noimage.png';
    }

InformationsquelleAutor Erik hoeven | 2015-09-26

Schreibe einen Kommentar