2015-07-27 7 views
22

Ich lerne node.js mit Express-Vorlage-Engine, ich bin gefolgt Udemy Kurs "lernen node.js durch den Bau von 10 Projekten", während eine Vorlesung, wenn Professor laufen npm start localhost:3000 beginnt während meins erscheint Fehler zeigt app.use erfordert Middleware-Funktion Ich habe versucht, übereinstimmenden Code und seine gleichen. Bitte helfen Sie mir, den Fehler zu beheben Ich habe hier stundenlang versucht, versuchte viele Änderungen, aber es funktioniert nicht für mich.typeerror: app.use() erfordert Middleware-Funktion

Wenn ich versuche, 'npm start' folgende Fehler ausgeführt erscheint

TypeError: app.use() requires middleware functions

ist hier app.js Code:

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var expressValidator = require('express-validator'); 
var cookieParser = require('cookie-parser'); 
var session = require('express-session'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 
var flash = require('connect-flash'); 
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' 
})); 

// uncomment after placing your favicon in /public 
//app.use(favicon(__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', 
    saveUninitialied: true, 
    resave: true 
})); 

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

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

app.use(flash()); 

app.use(function(req, res, next) { 
    res.locals.messages = require('express-messages')(req, res); 
    next(); 
}); 

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; 

Hier ist package.json Datei

{ 
    "name": "nodeauth", 
    "version": "1.0.0", 
    "private": true, 
    "scripts": { 
    "start": "node ./bin/www" 
    }, 
    "dependencies": { 
    "body-parser": "~1.12.4", 
    "cookie-parser": "~1.3.5", 
    "debug": "~2.2.0", 
    "express": "~4.12.4", 
    "jade": "~1.9.2", 
    "morgan": "~1.5.3", 
    "serve-favicon": "~2.2.1", 
    "mongodb": "*", 
    "mongoose": "*", 
    "connect-flash": "*", 
    "express-validator": "*", 
    "express-session": "*", 
    "express-messages": "*", 
    "passport": "*", 
    "passport-local": "*", 
    "passport-http": "*", 
    "multer": "*" 
    } 
} 

Hier wird aktualisiert app.js (nach multar Entfernen)

var express   = require('express'), 
    path    = require('path'), 
    favicon   = require('serve-favicon'), 
    logger   = require('morgan'), 
    cookieParser  = require('cookie-parser'), 
    expressValidator = require('express-validator'), 
    session   = require('express-session'), 
    passport   = require('passport'), 
    LocalStrategy = require('passport-local').Strategy, 
    bodyParser  = require('body-parser'), 
    flash   = require('connect-flash'), 
    mongo   = require('mongodb'), 
    mongoose   = require('mongoose'), 

    db = mongoose.connection, 

    routes = require('./routes/index'), 
    users = require('./routes/users'), 

    app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// handle file uploads 

//multer delted 


// uncomment after placing your favicon in /public 
//app.use(favicon(__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: 'keyboard cat', 
    resave: true, 
    saveUninitialized: true 
})); 

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

// validator 
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()); 

// express messages 
app.use(function(req, res, next) { 
    res.locals.messages = require('express-messages')(req, res); 
    next(); 
}); 

app.get('*', function(req, res, next) { 
    res.locals.user = req.user || null; 
    next(); 
}); 

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: {} 
    }); 
}); 


//Express server 
var http = require('http'); 
var server = http.createServer(app); 

app.get('/', function(req, res) { 
    res.send("Hello World!"); 
}); 

server.listen(3000, 'localhost'); 
server.on('listening', function() { 
    console.log('Express server started on port %s at %s', server.address().port, server.address().address); 
}); 

module.exports = app; 

danken Ihnen

+0

Sie müssen den Fehler im Detail hinzufügen! – prakharsingh95

+0

Ich bin nicht in der Lage, Bild hinzuzufügen, es benötigt 10 Punkte :( –

+0

@Tushar: Sir hier ist Link zu Screenshot des Fehlers: http://postimg.org/image/hn8blsqi9/ –

Antwort

44

es auf diese Weise gearbeitet. löschen Sie diese Zeile,

app.use(multer({ dest: './uploads' })); 

und verwenden Sie es als,

var multer = require('multer'); 
var upload = multer({ dest: './uploads' }); 

ich den gleichen Kurs folgende bin auch

+0

Es tut mir wirklich leid, aber ich habe den Zugang zu meinem neuen Google-Konto früher verloren und irgendwie Zugang bekommen jetzt, danke, dass du mir geholfen hast :) –

+2

Meine Antwort ist jünger und breiter als diese, warum habe ich sie nicht überprüft? –

+0

Knoten sollte eine aussagekräftigere Fehlermeldung angezeigt haben –

21

Wechsel:

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

Für so etwas wie:

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

oder

app.use(multer({dest:'./uploads/'}).array('multiInputFileName')); 

Und sich bewusst sein, etwas zu haben, wie:

<form action="/postPhotos" enctype="multipart/form-data"> 
    <input type="file" name="singleInputFileName"> 
    <input type="submit" value="Upload photo"> 
</form> 

für den ersten Fall, oder:

<form action="/postPhotos" enctype="multipart/form-data"> 
    <input type="file" name="multiInputFileName" multiple> 
    <input type="submit" value="Upload photo"> 
</form> 

Für die zweite, in Ihrem HTML.

+1

Ich habe den Multer entfernt, aber jetzt lassen Sie mich wieder hinzufügen, –

+0

@meanlearner ok, lassen Sie mich wissen, ob es funktioniert. –

5

Ich machte auch diesen Kurs & lief in das gleiche Problem. Ich beschloss, den Fehler durch die Verwendung Multer folgenden Anweisungen von ihrem Github: https://github.com/expressjs/multer

Hier ist der Code aus ihrer README ist:

var multer = require('multer') 
    var upload = multer({ dest: 'uploads/' }) 

& hier ist der Code, den ich verwendet, um den Fehler zu überwinden, während dieses Tutorial zu tun:

var multer = require('multer'); 
    var upload = multer({ dest: './uploads' }); 

Hoffe, es hilft :)

+0

Es tut mir wirklich leid, aber ich verlor früher den Zugang zu meinem neuen Google-Konto und bekam irgendwie Zugang, danke, dass du mir geholfen hast :) –

6

Das mit mir gearbeitet:

app.use(multer({ 
    dest: path.join(__dirname, 'public/upload/temp') 
}).any()); 
+1

Vielen Dank! Das war, was schließlich für mich funktionierte. – TWright

0

Ändern Sie nur diese Zeile

app.use(multer({dest:'./uploads'})); 

zu

var upload =multer({dest:'./uploads'}); 
1

Sie können einfach verwenden:

app.set(multer({dest: "./uploads"})); 

es auch für mich funktioniert.

Verwandte Themen