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