Es gab einige Middleware-Änderungen an der neuen Version von Express und ich habe einige Änderungen an meinem Code in Bezug auf einige der anderen Beiträge zu diesem Thema vorgenommen, aber ich kann nichts zum Festhalten bringen.
Wir hatten es vor der Arbeit, aber ich kann mich nicht erinnern, was die Änderung war.
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;
Es scheint, dass sich die Antwort auf diese Frage aus Versionsgründen geändert hat. Danke an Nik
javascript
node.js
express
Daten
quelle
quelle
routes/index
undroutes/users
zurück?Antworten:
Wenn Sie Express über 2.x verwenden, müssen Sie app.router wie unten angegeben deklarieren. Bitte versuchen Sie Ihren Code zu ersetzen
mit
Bitte klicken Sie hier , um weitere Informationen zu erhalten app.router
Vielen Dank
Hinweis:
app.router wird in Express 3.0+ abgeschrieben. Wenn Sie Express 3.0+ verwenden, lesen Sie die Antwort von Anirudh weiter unten.
quelle
Auf einer Ihrer js-Seiten fehlen Sie
Überprüfen und überprüfen Sie alle Ihre JS-Seiten
quelle
export {router}
gibt auch diesen Fehlers
am Ende: |Einfache Lösung, wenn Sie Express verwenden und tun
stellen Sie sicher, dass
am Ende Ihrer Seite
quelle
Ich habe die gleiche Fehlermeldung erhalten, hatte aber ein anderes Problem. Posting für andere, die auf dem gleichen stecken.
Ich portiert die
get
,post
,put
,delete
Funktionen , um neue Routerdatei während Refactoring, und vergessen , die Wege zu bearbeiten. Beispiel:Falsch:
Richtig:
Es hat eine Weile gedauert, bis ich festgestellt habe, dass ich aufgrund des Fehlers die Syntax überprüft habe, wo ich möglicherweise ein Argument in ein Objekt eingeschlossen habe oder wo ich das verpasst habe
module.exports = router;
quelle
Überprüfen Sie Ihre Datei route.js
Beispiel meine Routen.js
Überprüfen Sie das Ende von route.js
module.exports = Router
Wenn nicht, fügen Sie hinzu und module.exports = Router wird erneut ausgeführt
Gehen Sie zu controller.js (dh usersController) und überprüfen Sie alle Funktionsnamen, die Sie möglicherweise falsch geschrieben oder in der Funktionsroutendatei angegeben, aber in Steuerelementen übersehen haben
In route.js habe ich zwei Routen angegeben, aber in Controllern habe ich die Route nicht definiert
router.post ('/ users / login')
Dies führt zu einem Fehler **
"TypeError: route.post () erfordert Middleware-Funktion, hat aber ein Objekt"
** **.
quelle
Ich hatte diese Fehler- und Lösungshilfe, die von Anirudh gepostet wurde. Ich habe eine Vorlage für das Express-Routing erstellt und diese Nuance vergessen - ich bin froh, dass es eine einfache Lösung war.
Ich wollte seiner Antwort, wo dieser Code abgelegt werden soll, eine kleine Klarstellung geben, indem ich meine Dateistruktur erläuterte.
Meine typische Dateistruktur lautet wie folgt:
---index.js
(steuert die Hauptnavigation)(jede Datei [in meinem Fall die index.js auf Seite zwei, obwohl Seite eins auch eine index.js haben würde] - für jede Seite - die am Ende verwendet wird
app.METHOD
oderrouter.METHOD
mussmodule.exports = router;
)Wenn jemand möchte, werde ich einen Link zur Github-Vorlage veröffentlichen, die das Express-Routing mithilfe von Best Practices implementiert. Gib mir Bescheid
Danke Anirudh !!! für die tolle Antwort.
quelle
Überprüfen Sie alle diese Dateien:
Richtig speichern. In meinem Fall wurde eine Datei übersehen und der gleiche Fehler ausgegeben
quelle
In meinem Fall habe ich das Modul nicht exportiert.
module.exports = router;
quelle
module.exports = router;