Il y a eu quelques changements de middleware sur la nouvelle version d'express et j'ai apporté des changements dans mon code autour de certains des autres articles sur ce problème, mais je ne peux rien obtenir à coller.
Nous l'avons fait fonctionner avant, mais je ne me souviens pas du changement.
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;
Il semble que la réponse à cette question a changé pour des raisons de contrôle de version. Merci à Nik
javascript
node.js
express
Datise
la source
la source
routes/index
etroutes/users
revenir?Réponses:
Si vous utilisez express au-dessus de 2.x, vous devez déclarer app.router comme le code ci-dessous. Veuillez essayer de remplacer votre code
avec
Veuillez cliquer ici pour obtenir plus de détails sur app.router
Merci
Remarque:
app.router est déprécié dans express 3.0+. Si vous utilisez express 3.0+, reportez-vous à la réponse d'Anirudh ci-dessous.
la source
Dans l'une de vos pages js, vous manquez
Vérifiez et vérifiez toutes vos pages JS
la source
export {router}
donne aussi cette erreurs
à la fin: |Solution simple si vous utilisez express et pratique
assurez-vous de
à la fin de votre page
la source
J'obtenais le même message d'erreur mais j'avais un problème différent. Publier pour d'autres qui sont bloqués sur le même.
Je l'Ported
get
,post
,put
,delete
fonctions au nouveau fichier de routeur en refactoring, et oublié de modifier les chemins. Exemple:Incorrect:
Correct:
Il a fallu un certain temps pour le repérer, car l'erreur m'a fait vérifier la syntaxe où j'aurais pu encapsuler un argument dans un objet ou où j'avais manqué le
module.exports = router;
la source
vérifiez votre fichier routes.js
exemple mes routes.js
vérifier la fin de routes.js
module.exports = routeur
sinon, ajoutez et module.exports = router à nouveau
goto controller.js (c'est-à-dire, usersController) et vérifiez tous les noms de fonction que vous pourriez mal orthographier, ou que vous avez donnés dans le fichier de routes de fonction mais que vous avez manqués dans les contrôleurs
dans routes.js j'ai donné deux routes mais dans les contrôleurs j'ai manqué de définir la route pour
router.post ('/ utilisateurs / login')
cela fera une erreur **
"TypeError: route.post () nécessite une fonction middleware mais a un objet"
**
la source
J'ai eu cette erreur et l'aide à la solution qui a été publiée par Anirudh. J'ai construit un modèle pour le routage express et j'ai oublié cette nuance - heureux que ce soit une solution facile.
Je voulais clarifier un peu sa réponse sur où mettre ce code en expliquant la structure de mon fichier.
Ma structure de fichier typique est la suivante:
---index.js
(contrôle la navigation principale)(chaque fichier [dans mon cas, l'index.js dans la page deux, bien que la page un ait aussi un index.js] - pour chaque page - qui utilise
app.METHOD
ourouter.METHOD
doit avoirmodule.exports = router;
à la fin)Si quelqu'un le souhaite, je publierai un lien vers le modèle github qui implémente le routage express en utilisant les meilleures pratiques. faites le moi savoir
Merci Anirudh !!! pour la bonne réponse.
la source
Vérifiez tous ces fichiers:
Enregistrez correctement, dans mon cas, un fichier a été manqué et a généré la même erreur
la source
Dans mon cas, je n'exportais pas le module.
module.exports = router;
la source
module.exports = router;