{"id":208,"hash":"35af975ad506ed305f43aaf9fe899c9ac350fc36c3ae0920a90f317cc396a7d9","pattern":"TypeError: Router.use() requires middleware function but got a Object","full_message":"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 anything to stick.\n\nWe had it working before hand but I can't remember what the change was. \n\nthrow new TypeError('Router.use() requires middleware function but got a\n        ^\nTypeError: Router.use() requires middleware function but got a Object\n\nnode ./bin/www\n\njs-bson: Failed to load c++ bson extension, using pure JS version\njs-bson: Failed to load c++ bson extension, using pure JS version\n\n/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438\n      throw new TypeError('Router.use() requires middleware function but got a\n            ^\nTypeError: Router.use() requires middleware function but got a Object\n    at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438:13\n    at Array.forEach (native)\n    at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:436:13)\n    at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:188:21\n    at Array.forEach (native)\n    at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:185:7)\n    at Object.<anonymous> (/Users/datis/Documents/bb-dashboard/app.js:46:5)\n    at Module._compile (module.js:456:26)\n    at Object.Module._extensions..js (module.js:474:10)\n    at Module.load (module.js:356:32)\n\napp.js\n\nvar express = require('express');\nvar path = require('path');\nvar favicon = require('serve-favicon');\nvar logger = require('morgan');\nvar cookieParser = require('cookie-parser');\nvar bodyParser = require('body-parser');\nvar mongoose = require('mongoose');\nvar session = require('express-session');\nvar MongoClient = require('mongodb').MongoClient;\nvar routes = require('./routes/index');\nvar users = require('./routes/users');\n\nvar Users = require('./models/user');\nvar Items = require('./models/item');\nvar Store = require('./models/store');\nvar StoreItem = require('./models/storeitem');\n\nvar app = express();\n//set mongo db connection\nvar db = mongoose.connection; \n\nMongoClient.connect(\"mongodb://localhost:27017/test\", function(err, db) {\n  if(!err) {\n    console.log(\"We are connected\");\n  }\n});\n// var MONGOHQ_URL=\"mongodb://localhost:27017/test\" \n\n// view engine setup\napp.set('views', path.join(__dirname, 'views'));\n\napp.set('view engine', 'ejs');\n\n// uncomment after placing your favicon in /public\n//app.use(favicon(__dirname + '/public/favicon.ico'));\napp.use(logger('dev'));\napp.use(bodyParser.json());\napp.use(bodyParser.urlencoded({ extended: false }));\napp.use(cookieParser());\napp.use(session({\n    secret: 'something',\n    resave: true,\n    saveUninitialized: true\n}));\n\napp.use('/', routes);\napp.use('/users', users);\napp.use(express.static(path.join(__dirname, 'public')));\n\n// catch 404 and forward to error handler\n// app.use(function(req, res, next) {\n//     var err = new Error('Not Found');\n//     err.status = 404;\n//     next(err);\n// });\n\n// Make our db accessible to our router\napp.use(function(req, res, next){\n  req.db = db;\n  next();\n});\n\n// error handlers\n\n// development error handler\n// will print stacktrace\nif (app.get('env') === 'development') {\n    app.use(function(err, req, res, next) {\n        res.status(err.status || 500);\n        res.render('error', {\n            message: err.message,\n            error: err\n        });\n    });\n}\n\n// production error handler\n// no stacktraces leaked to user\napp.use(function(err, req, res, next) {\n    res.status(err.status || 500);\n    res.render('error', {\n        message: err.message,\n        error: {}\n    });\n});\n\nmodule.exports = app;\n\nIt appears the answer to this question has changed for versioning reasons. Thanks to Nik","ecosystem":"npm","package_name":"node.js","package_version":null,"solution":"If your are using express above 2.x, you have to declare app.router like below code. Please try to replace your code\n\napp.use('/', routes);\n\nwith\n\napp.use(app.router);\nroutes.initialize(app);\n\nPlease click here to get more details about app.router\n\nNote:\napp.router is depreciated in express 3.0+.  If you are using express 3.0+, refer to Anirudh's answer below.","confidence":0.95,"source":"stackoverflow","source_url":"https://stackoverflow.com/questions/27465850/typeerror-router-use-requires-middleware-function-but-got-a-object","votes":353,"created_at":"2026-04-19T04:41:32.692023+00:00","updated_at":"2026-04-19T04:51:14.644719+00:00"}