Diese Fehlermeldung wird angezeigt, wenn Sie npm start ausführen, um meine Express-App auszuführen.
TypeError: Router.use() requires middleware function but got a Object
mein 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;
mein 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;
Ich bin neugierig auf Node und Express. Ich kann nicht sehen, wo ich falsch gelaufen bin. Kann jemand sehen, was mein Problem ist?
Ich habe die Antwort in den Kommentaren von Kop4lyf gefunden:
Überprüfen Sie Ihre Benutzer.js. Es sollte auch den Router wie .__ exportieren. index.js, wenn Sie das versuchen können.
Diese Frage war jedoch mein Top-Suchergebnis, als ich auf dieses Problem stieß, und ich befürworte eine Antwort.
Der Fehler wird dadurch verursacht, dass eines Ihrer Routenmodule nicht exportiert wird. Dies bedeutet, dass Express keinen Zugriff darauf hat, wenn es versucht, alle Routen zu identifizieren.
Sie können dies beheben, indem Sie module.exports = router;
am Ende jeder Routendatei hinzufügen.
Beispiel:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
//Do whatever...
});
module.exports = router;
Weitere Informationen zu module.exports
finden Sie unter dieser Frage oder der offcial Node.js-Dokumentation .
Ich habe dies korrigiert, indem ich hinzufügte, was ich irgendwo verwende. Also bitte alle Exporte überprüfen.
module.exports = router;
Ihre index.js-Datei ist in Ordnung, Sie müssen lediglich users.js erstellen und exportieren.
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;
in every module **export the router** and **keep one handler for the default
path '/'**
// in index.js
const authRoute = require("./routes/authRoute");
app.use("/auth", authRoute);
// in authRoute.js
const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
// code
});
module.exports = router;
Wenn Sie die gesamte Lösung geprüft haben und auch diesen Fehler haben, dann prüfen Sie diese
Eine weitere Ursache für diesen Fehler ist das Aufrufen einer Methode, die nicht vorhanden oder nicht exportiert ist .. In meinem Fall rufe ich login method auf, aber ich habe vergessen, sie zu definieren
Ich habe versucht, diese Methode aufzurufen
app.post('/api/login', db.login);
aber ich hatte vergessen, eine Login-Methode zu erstellen, also bekam ich diesen Fehler. Versuchen Sie auch, den Rechtschreibfehler zu überprüfen. Möglicherweise haben Sie einen falschen Zauber eingegeben
Dieser Fehler tritt auf, wenn Sie vergessen haben, das Modul zu exportieren, das den Router verwendet.
Ihr erwähnter Code funktioniert perfekt mit einigen Optimierungen.
wenn Ihre app.js Haupt-/Startpunkt der App ist.
es sollte haben
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));
anstatt
module.exports = app;
(optional) Im Allgemeinen wird index.js als Startpunkt der App verwendet. Benennen Sie index.js als helloworld.js um und ändern Sie es bei Anweisung von
var routes = require('./routes/index');
zu
var routes = require('./routes/helloworld');
führen Sie diese App mit dem folgenden Befehl aus
node app.js
Ich hatte das gleiche Problem, und dann stellte ich fest, dass mir diese Zeile in einem meiner Controller fehlte!
return api;
//es könnte sein return router
für deinen Code!
Ich habe diese Zeile zu meinem Code hinzugefügt und es hat gut funktioniert.