2012-12-23 11 views
8

Cerco di caricare un png sul mio server node.js, ma ogni volta che viene chiamato req.files.avatar, viene visualizzato un errore e viene indicato TypeError: Cannot read property 'avatar' of undefined.In express.js, req.files non è definito

+0

Ouh, è vero, mi spiace – MrMangado

+0

Che aspetto ha il codice che carica il file sul lato client? – JohnnyHK

+0

Usi bodyParser come middleware? –

risposta

17

Il problema era che non ho scritto enctype="multipart/form-data" nel modulo. Ecco perché req.files non è stato definito.

+6

non proprio, ho enctype = "multipart/form-data" ma ho ottenuto lo stesso errore – ngakak

16

Inoltre, penso che devi includere il tuo BodyParser prima delle eventuali istruzioni per utilizzare app.router o middleware statico. Dopo alcune prove ed errori questo è l'ordine che funziona per me.

app.configure(function(){ 
    app.set('port', process.env.port || 3000); 
    app.set('views', __dirname + '/app/server/views'); 
    app.set('view engine', 'jade'); 
    app.locals.pretty = true; 
    app.use(express.favicon()); 
    app.use(express.bodyParser({ keepExtensions: true, uploadDir: __dirname + '/app/uploads' })); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: 'super-duper-secret-secret' })); 
    app.use(app.router); 
    app.use(require('stylus').middleware({ src: __dirname + '/app/public' })); 
    app.use(express.static(__dirname + '/app/public')); 
}); 
+2

Ho completamente dimenticato il parser del corpo e questo risolve il mio problema. Grazie! – x1a0