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

后端 未结 9 1301
被撕碎了的回忆
被撕碎了的回忆 2020-11-29 20:30

There have been some middleware changes on the new version of express and I have made some changes in my code around some of the other posts on this issue but I can\'t get a

相关标签:
9条回答
  • 2020-11-29 21:04

    check your routes.js file

    example my routes.js

        const express = require('express')
        const router = express.Router()
        
        const usersController = require('../app/controllers/usersController')
        const autheticateuser = require('../app/middlewares/authentication')
        
        router.post('/users/login', autheticateuser, usersController.login)
        router.post('/users/register', autheticateuser, usersController.register)
          

    check end of routes.js

    module.exports = router

    if not there add and module.exports = router run again


    If your Error is : "TypeError: Route.post() or Route.get() requires middleware function but got a Object"

    goto controller.js (i.e., usersController) and check all the function names you might misspelled , or you given in function routes file but missed in contollers

    const User = require('../models/user')
    const express = require('express')
    const router = express.Router()
    
    
    
    module.exports.register = (req, res) => {
        const data = req.body
        const user = new User(data)
        user.save()
            .then((user) => {
                res.send(user)
            })
            .catch((err) => {
                res.json(err)
            })
    }

    in routes.js i given two routes but in controllers i missed to define route for

    router.post('/users/login')

    this will make error **

    "TypeError: route.post() requires middleware function but got a Object"

    **

    0 讨论(0)
  • 2020-11-29 21:08

    In my case i wasn't exporting the module. module.exports = router;

    0 讨论(0)
  • 2020-11-29 21:15

    Simple solution if your are using express and doing

    const router = express.Router();
    

    make sure to

    module.exports = router ;
    

    at the end of your page

    0 讨论(0)
  • 2020-11-29 21:20

    I had this error and solution help which was posted by Anirudh. I built a template for express routing and forgot about this nuance - glad it was an easy fix.

    I wanted to give a little clarification to his answer on where to put this code by explaining my file structure.

    My typical file structure is as follows:

    /lib
    
    /routes
    

    ---index.js (controls the main navigation)

    /page-one
    
    
    
    /page-two
    
    
    
         ---index.js
    

    (each file [in my case the index.js within page-two, although page-one would have an index.js too]- for each page - that uses app.METHOD or router.METHOD needs to have module.exports = router; at the end)

    If someone wants I will post a link to github template that implements express routing using best practices. let me know

    Thanks Anirudh!!! for the great answer.

    0 讨论(0)
  • 2020-11-29 21:20

    Check your all these file:

    var users = require('./routes/users');
    
    var Users = require('./models/user');
    var Items = require('./models/item');
    

    Save properly, In my case, one file was missed and throwing the same error

    0 讨论(0)
  • 2020-11-29 21:21

    If your are using express above 2.x, you have to declare app.router like below code. Please try to replace your code

    app.use('/', routes);
    

    with

    app.use(app.router);
    routes.initialize(app);
    

    Please click here to get more details about app.router

    Note:

    app.router is depreciated in express 3.0+. If you are using express 3.0+, refer to Anirudh's answer below.

    0 讨论(0)
提交回复
热议问题