Se han producido algunos cambios de middleware en la nueva versión de express y he realizado algunos cambios en mi código en algunas de las otras publicaciones sobre este tema, pero no puedo hacer nada para pegarme.
Lo teníamos funcionando de antemano, pero no recuerdo cuál fue el cambio.
throw new TypeError('Router.use() requires middleware function but got a
^
TypeError: Router.use() requires middleware function but got a Object
node ./bin/www
js-bson: Failed to load c++ bson extension, using pure JS version
js-bson: Failed to load c++ bson extension, using pure JS version
/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438
throw new TypeError('Router.use() requires middleware function but got a
^
TypeError: Router.use() requires middleware function but got a Object
at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438:13
at Array.forEach (native)
at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:436:13)
at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:188:21
at Array.forEach (native)
at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:185:7)
at Object.<anonymous> (/Users/datis/Documents/bb-dashboard/app.js:46:5)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
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 mongoose = require('mongoose');
var session = require('express-session');
var MongoClient = require('mongodb').MongoClient;
var routes = require('./routes/index');
var users = require('./routes/users');
var Users = require('./models/user');
var Items = require('./models/item');
var Store = require('./models/store');
var StoreItem = require('./models/storeitem');
var app = express();
//set mongo db connection
var db = mongoose.connection;
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
if(!err) {
console.log("We are connected");
}
});
// var MONGOHQ_URL="mongodb://localhost:27017/test"
// 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: false }));
app.use(cookieParser());
app.use(session({
secret: 'something',
resave: true,
saveUninitialized: true
}));
app.use('/', routes);
app.use('/users', users);
app.use(express.static(path.join(__dirname, 'public')));
// catch 404 and forward to error handler
// app.use(function(req, res, next) {
// var err = new Error('Not Found');
// err.status = 404;
// next(err);
// });
// Make our db accessible to our router
app.use(function(req, res, next){
req.db = db;
next();
});
// 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;
Parece que la respuesta a esta pregunta ha cambiado por razones de versiones. Gracias a Nik
javascript
node.js
express
Datise
fuente
fuente
routes/index
yroutes/users
volver?Respuestas:
Si está utilizando express por encima de 2.x, debe declarar app.router como el código a continuación. Intenta reemplazar tu código
con
Haga clic aquí para obtener más detalles sobre app.router
Gracias
Nota:
app.router se deprecia en express 3.0+. Si está utilizando express 3.0+, consulte la respuesta de Anirudh a continuación.
fuente
En cualquiera de tus páginas js te falta
Verifique y verifique todas sus páginas JS
fuente
export {router}
también da ese errors
final: |Solución simple si estás usando express y haciendo
asegurate que
al final de tu página
fuente
Recibía el mismo mensaje de error pero tenía un problema diferente. Publicar para otros que están atrapados en lo mismo.
Porté el
get
,post
,put
,delete
funciones de archivo nuevo enrutador mientras refactorización, y se olvidó de editar los caminos. Ejemplo:Incorrecto:
Correcto:
Tardó un tiempo en detectarlo, ya que el error me hizo verificar la sintaxis donde podría haber estado envolviendo un argumento en un objeto o donde perdí el
module.exports = router;
fuente
revise su archivo routes.js
ejemplo my routes.js
verificar el final de routes.js
module.exports = router
si no existe, agregue y module.exports = router vuelva a ejecutarse
vaya a controller.js (es decir, usersController) y verifique todos los nombres de funciones que pueda haber escrito incorrectamente o que haya proporcionado en el archivo de rutas de funciones pero que haya perdido en los controladores
en routes.js di dos rutas pero en los controladores no pude definir la ruta para
router.post ('/ users / login')
esto hará error **
"TypeError: route.post () requiere la función de middleware pero tiene un objeto"
** **
fuente
Recibí este error y la ayuda de la solución que Anirudh publicó. Creé una plantilla para el enrutamiento rápido y olvidé este matiz, me alegro de que fuera una solución fácil.
Quería aclarar un poco su respuesta sobre dónde colocar este código explicando la estructura de mi archivo.
Mi estructura de archivo típica es la siguiente:
---index.js
(controla la navegación principal)(cada archivo [en mi caso, el index.js dentro de la página dos, aunque la página uno también tendría un index.js] - para cada página - que usa
app.METHOD
orouter.METHOD
necesita tenermodule.exports = router;
al final)Si alguien quiere, publicaré un enlace a la plantilla de github que implementa el enrutamiento rápido utilizando las mejores prácticas. Házmelo saber
Gracias Anirudh !!! por la gran respuesta
fuente
Verifique todos sus archivos:
Guardar correctamente, en mi caso, se perdió un archivo y arrojó el mismo error
fuente
En mi caso no estaba exportando el módulo.
module.exports = router;
fuente
module.exports = router;