webentwicklung-frage-antwort-db.com.de

Expressfehler - TypeError: Router.use () erfordert eine Middleware-Funktion, hat jedoch ein Objekt erhalten

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? 

25
MattClaff

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 .

52
HPierce

Ich habe dies korrigiert, indem ich hinzufügte, was ich irgendwo verwende. Also bitte alle Exporte überprüfen.

module.exports = router;
11
SUBHASIS MONDAL

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;
3
Tikaram Mardi
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

0
Ankit

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
0
Himavan

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 routerfür deinen Code!

Ich habe diese Zeile zu meinem Code hinzugefügt und es hat gut funktioniert.

0