Express-fout – TypeError: Router.use() vereist een middleware-functie maar heeft een object

Ik krijg deze foutmelding wanneer ik npm start uitvoer om mijn express-app uit te voeren.

TypeError: Router.use() requires middleware function but got a Object

mijn 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;

mijn 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;

Ik ben nieuw in het gebruik van Node en express. Ik kan niet zien waar ik fout ben gegaan. Kan iemand zien wat mijn probleem is?


Antwoord 1, autoriteit 100%

Ik vond het antwoord in de opmerkingen van Kop4lyf:

controleer uw gebruikers.js. Het zou ook de router moeten exporteren zoals
index.js, als je dat kunt proberen.

Deze vraag was echter mijn beste zoekresultaat toen ik dit probleem tegenkwam, dus ik promoveer naar een antwoord.


De fout wordt veroorzaakt doordat een van je routemodules niet wordt geëxporteerd, wat betekent dat Express er geen toegang toe heeft wanneer het al je routes probeert te identificeren.

Je kunt dit oplossen door module.exports = router;toe te voegen aan het einde van elk van je routebestanden.

Voorbeeld:

var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
     //Do whatever...
});
module.exports = router;

Meer informatie over module.exportsis te vinden op deze vraagof de officiële Node.js-documentatie .


Antwoord 2, autoriteit 24%

Ik heb dit opgelost door toe te voegen wat ik ergens gebruik. Dus controleer al je exports.

module.exports = router;

Antwoord 3, autoriteit 9%

Als je in routes gebruikt

exports default router

Uw oplossing kan zijn

module.exports = router

Antwoord 4, autoriteit 4%

Uw index.js-bestand is in orde. U hoeft alleen maar users.jsaan te maken en te exporteren.

  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;

Antwoord 5, autoriteit 2%

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;

Antwoord 6, autoriteit 2%

Ik had dezelfde fout, heb het verholpen door app.use('view engine', 'ejs')te vervangen door app.set('view engine', 'ejs').
Ter referentie heb ik deze webpagina gebruikt Migreren van 3. x tot 4.x

Ik hoefde geen wijzigingen aan te brengen in index.js of application.js. Voor meer informatie over EJS kan men verwijzen naar EJS gebruiken met Expressen Express 4.x API


Antwoord 7

Deze fout treedt op wanneer u bent vergeten de module te exporteren die de router gebruikt.

Uw genoemde code werkt perfect met enkele aanpassingen.

als uw app.js het hoofd-/startpunt van de app is.

het zou

. moeten hebben

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));

in plaats van

module.exports = app;

(optioneel)In het algemeen wordt index.js gebruikt als startpunt van de app. Hernoem index.js naar helloworld.js en wijzig hetzelfde in de instructie required

var routes = require('./routes/index');

naar

var routes = require('./routes/helloworld');

voer deze app uit met de volgende opdracht

node app.js

Antwoord 8

Als je alle oplossingen hebt gecontroleerd dan heb je ook deze fout, controleer dan deze

Een andere oorzaak van deze fout is het aanroepen van een methode die niet bestaat of niet is geëxporteerd.
In mijn geval roep ik de login-methode aan, maar ik ben vergeten ze te definiëren

Ik probeerde deze methode aan te roepen

app.post('/api/login', db.login);

maar ik was vergeten een inlogmethode aan te maken, dus kreeg ik deze foutmelding. probeer ook de spelfout te controleren, misschien heb je een verkeerde spelling getypt


Antwoord 9

Ik had hetzelfde probleem, en toen ontdekte ik dat ik deze regel in een van mijn controllers miste!

return api;//het kan return routerzijn voor uw code!

Ik heb deze regel aan mijn code toegevoegd en het werkte prima.


Antwoord 10

Oef, mijn probleem was dat ik module.exports = { router } deed in plaats van module.exports = router


Antwoord 11

Ik vond het na veel strijd! omdat alles syntactisch correct is, niets mis met code die is geschreven, het was te wijten aan de code die nog niet was geschreven! Dit kan gebeuren als u index.js heeft geïmplementeerd, maar nog geen users.js. U hebt echter beide lijnen al gedefinieerd
app.gebruik(‘/’, routes);
app.use(‘/users’, gebruikers);
Als u index.js meteen wilt testen zonder te wachten tot users.js is geïmplementeerd. Dat is precies wanneer het fout gaat.


Antwoord 12

als je nog steeds met dit probleem wordt geconfronteerd en elke oplossing probeert, vervang dan de router door routes en het werkte prima


Antwoord 13

Ik heb het opgelost door de app.use(/users, users);

te verwijderen

Ik heb dit op dit moment niet nodig, dus misschien is het daarom begonnen te breken.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes