Ich verwende Node v0.10.26 und Express v4.2.0 und bin ziemlich neu in Node. Ich habe in den letzten drei Stunden meinen Kopf gegen meinen Schreibtisch geschlagen und versucht, ein Formular zum Hochladen von Dateien mit Node zum Laufen zu bringen. An dieser Stelle versuche ich nur, req.files dazu zu bringen, nicht undefiniert zurückzugeben. Meine Ansicht sieht so aus
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>{{ title }}</h1>
<p>Welcome to {{ title }}</p>
<form method='post' action='upload' enctype="multipart/form-data">
<input type='file' name='fileUploaded'>
<input type='submit'>
</form>
</body>
</html>
Hier sind meine Routen
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
router.post('/upload', function(req, res){
console.log(req.files);
});
module.exports = router;
Und hier ist meine app.js.
var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
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', 'hjs');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
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;
Ich habe irgendwo gesehen, dass einschließlich methodOverride()
und bodyParser({keepExtensions:true,uploadDir:path})
sollte helfen, aber ich kann meinen Server nicht einmal starten, wenn ich diese Zeilen hinzufüge.
formidable
und express
. AFAIK müssen Sie aktivieren, formiable
das die Verantwortung für den Umgang mit mehrteiligen Formulardaten übernimmt, die Dateien auf der lokalen Festplatte speichert (was das uploadDir
Mittel ist), dann können Sie sie verwenden req.files
, um sie zu lesen und Ihre Geschäftslogik zu verarbeiten.
app.use(express.static(path.join(__dirname, 'public')));