Je reçois cette erreur lorsque je lance npm start pour exécuter mon application express.
TypeError: Router.use() requires middleware function but got a Object
mon app.js code
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;
mon index.js code
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;
Je suis quirte pour la première fois en utilisant Node and Express. Je ne vois pas où je me suis trompé. Quelqu'un peut-il voir quel est mon problème?
J'ai trouvé la réponse dans les commentaires de Kop4lyf :
vérifiez votre users.js. Il devrait également exporter le routeur comme index.js, si vous pouvez l'essayer.
Cependant, cette question était mon premier résultat de recherche lorsque j'ai rencontré ce problème. Je souhaite donc une réponse.
L'erreur est due au fait que l'un de vos modules de route n'est pas exporté - ce qui signifie qu'Express n'y a pas accès lorsqu'il tente d'identifier toutes vos routes.
Vous pouvez résoudre ce problème en ajoutant module.exports = router;
à la fin de chacun de vos fichiers de route.
Exemple:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
//Do whatever...
});
module.exports = router;
Plus d'informations sur module.exports
sont disponibles sur this question ou dans la documentation offcial Node.js .
J'ai résolu ce problème en ajoutant ce que j'utilise quelque part. Alors s'il vous plaît vérifier vos toutes les exportations.
module.exports = router;
Votre fichier index.js va bien, il vous suffit de créer users.js et de l'exporter.
let express = require('express');
let router = express.Router();
//Login Page - GET REQUEST
router.get('/login',(req,res)=> {
res.send('login page');
})
//Register Page - GET REQUEST
router.get('/register',(req,res)=> {
res.send('register page');
});
module.exports = router;
Si vous avez coché toutes les solutions, vous avez également cette erreur puis cochez cette option
Une autre cause de cette erreur appelle une méthode qui n’existe pas ou n’est pas exportée . Dans mon cas, j’appelle login méthode mais j’ai oublié de les définir.
J'essayais d'appeler cette méthode
app.post('/api/login', db.login);
mais j'avais oublié de créer une méthode de connexion, donc j'ai eu cette erreur. essayez également de vérifier les fautes d'orthographe. Peut-être avez-vous tapé un mauvais sort
Cette erreur survient lorsque vous avez oublié d’exporter le module qui utilise le routeur.
Votre code mentionné fonctionne parfaitement avec quelques ajustements.
si votre app.js est le principal/le point de départ de l'application.
il aurait dû
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));
au lieu de
module.exports = app;
(facultatif) En règle générale, index.js est utilisé pour le point de départ de l'application. Renommez index.js en helloworld.js et changez-le à l'instruction require
var routes = require('./routes/index');
à
var routes = require('./routes/helloworld');
exécuter cette application en utilisant la commande suivante
node app.js