Recibo este error cuando ejecuto npm start para ejecutar mi aplicación express.
TypeError: Router.use() requires middleware function but got a Object
mi código app.js
var express = require('express'); var path = require('path'); var favicon = require('serve-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', 'ejs'); // 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: true })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); /// catch 404 and forwarding 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;
mi código index.js
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res) { res.render('index', { title: 'Express' }); }); /* GET Hello World page. */ router.get('/helloworld', function(req, res) { res.render('helloworld', { title: 'Hello, World!' }) }); module.exports = router;
Soy bastante nuevo en el uso de Node y express. No puedo ver dónde me he equivocado. ¿Alguien puede ver cuál es mi problema?
Encontré la respuesta en los comentarios de Kop4lyf :
verifique sus usuarios.js. También debería exportar el enrutador como index.js, si puede intentarlo.
Sin embargo, esta pregunta fue mi principal resultado de búsqueda cuando me encontré con este problema, por lo que estoy promoviendo una respuesta.
El error se debe a que uno de sus módulos de ruta no se exporta, lo que significa que Express no tiene acceso a él cuando intenta identificar todas sus rutas.
Puede solucionar esto agregando module.exports = router;
al final de cada uno de sus archivos de ruta.
Ejemplo:
var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { //Do whatever... }); module.exports = router;
Puede encontrar más información sobre module.exports
en esta pregunta o en la documentación oficial de Node.js.
He arreglado esto agregando cuál estoy usando en alguna parte. Por lo tanto, compruebe todas sus exportaciones.
module.exports = router;
Si usas en rutas
exports default router
Tu solución puede ser
module.exports = router