2014-01-15 3 views
12

Ich entschuldige mich wirklich, wenn ich etwas auslasse und total dumm bin, aber ich habe ein paar Mal überprüft und erneut überprüft, und die Datei-Upload-Funktion ist einfach nicht hier arbeiten. Ich habe eine super minimale App zum Demonstrieren gemacht. Habe gerade eine neue Express-App mit der aktuellsten Version (3.4.7) erstellt und die letzte hinzugefügt, um einen Datei-Upload zu ermöglichen.Express kann Datei nicht hochladen, req.files ist undefined

Hier ist mein app.js

/** 
* Module dependencies. 
*/ 

var express = require('express'); 
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.urlencoded()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/tasks', function(req, res) { 
    res.render('form'); 
}); 
app.post('/tasks', function(req, res) { 
    console.log(req.files); 
    res.send('ok'); 
}); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

exports = module.exports = app; 

-Datei und hier ist meine form.jade Ansicht Datei:

doctype html 
html 
    head 
    title Task Upload 
    body 
    form(action='/tasks', method='post', enctype='multipart/form-data') 
     input(name='task', type='file') 
     input(type='submit') 

Jedesmal, wenn ich eine Datei hochladen, req.filesundefined abmeldet. Kann mich jemand vor diesem Problem retten?

Antwort

9

die folgenden in Ihrem app.js

app.configure(function(){ 
app.use(express.methodOverride()); 
app.use(express.bodyParser({keepExtensions:true,uploadDir:path.join(__dirname,'/files'})); 

}); 

hinzufügen und dann versuchen, zuzugreifen wie folgt;

Es wird empfohlen, nicht bodyParser zu verwenden, sondern einfach den gewünschten Behandlungstyp zu definieren. In Ihrem Fall, da seine Dateien hochladen, können Sie es ermöglichen, als

app.configure(function(){ 
    app.use(express.methodOverride()); 
    app.use(express.multipart()); 
    }); 

folgt lesen Sie, warum bodyParser mit() ist keine gute Idee, in den folgenden Link.

http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

+0

Vielen Dank! Ich ignoriere einfach den BodyParser, wirklich dumm. Und der Link ist auch hilfreich. – hulufei

5

In Express 4, req.files ist nicht mehr auf dem erf Objekt standardmäßig. Für den Zugriff auf die hochgeladenen Dateien auf den req.files Objekt, verwenden mehrt-Handling-Middleware wie busboy, multer, formidable, Mehrparteien-, connect-Mehr,.

Verwandte Themen