tutorial servidor nodejs node mdn con javascript node.js express mean

javascript - servidor - npm express



typeerror: app.use() requiere una funciĆ³n de middleware (7)

Estoy aprendiendo node.js con el motor de plantillas express, estoy siguiendo el curso de udemy "aprende node.js construyendo 10 proyectos", mientras npm start localhost:3000 una conferencia cuando el profesor ejecuta npm start localhost:3000 inicia mientras que el mío aparece un error que indica que app.use requiere Función middleware He intentado emparejar código y su mismo. Por favor, ayúdeme a resolver el error. He estado atascado aquí durante horas. Intenté muchas ediciones, pero no me funcionó.

Cuando intento ejecutar ''npm start'' aparece un error emergente

TypeError: app.use () requiere funciones de middleware

Aquí está el código app.js:

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;

Aquí está el archivo package.json

{ "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": "*" } }

Aquí se actualiza app.js (después de eliminar multar)

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;

Gracias


Cambio:

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

Para algo como:

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

o

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

Y ten en cuenta que tienes algo como:

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

para el primer caso, o

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

Para el segundo, en tu html.


Esto funcionó conmigo:

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


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

a

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

trabajó para mi.


También estaba haciendo ese curso y me encontré con el mismo problema. Resolví el error siguiendo las instrucciones de uso de Multer de su github: https://github.com/expressjs/multer

Aquí está el código de su README:

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

Y aquí está el código que utilicé para superar el error al hacer ese tutorial:

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

Espero eso ayude :)


cambiar solo esta linea

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

a

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


simplemente puede utilizar:

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

funciona para mi tambien


Funcionó de esta manera. borra esta línea,

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

y usarlo como,

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

Yo también estoy siguiendo el mismo curso