TypeError:Router.use()需要中间件功能,但有一个Object [英] TypeError: Router.use() requires middleware function but got a Object

查看:160
本文介绍了TypeError:Router.use()需要中间件功能,但有一个Object的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

新版本的Express已经出现了一些中间件更改,我在这个问题上的一些其他帖子中对代码进行了一些更改,但我无法保证。



我们在手之前工作,但我不记得这个变化。

 抛出新的TypeError('Router.use()需要中间件功能,但得到
^
TypeError:Router.use()需要中间件功能,但是有一个对象






 节点./bin/www 

js-bson:加载c ++ bson扩展失败,使用纯JS版本
js-bson:无法加载c ++ bson扩展名,使用纯JS版本






  /Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438 
抛出新的TypeError('Router.use()需要中间件功能,但是有一个
^
TypeError:Router.use()需要中间件功能,但在/ Users / datis / Document / bb-dashboard / node_modules / express / lib / router / index.js:438:13
在Array.forEach(native)
在Function.use(/ Users / datis / Documents / bb- dashbo ard / node_modules / express / lib / router / index.js:436:13)
at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:188:21
在Array.forEach(native)
在Function.use(/Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:185:7)
在Object。< ;匿名> (/Users/datis/Documents/bb-dashboard/app.js:46:5)
在Module._compile(module.js:456:26)
在Object.Module._extensions..js (module.js:474:10)
在Module.load(module.js:356:32)

app.js

  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 mongoose = require('mongoose');
var session = require('express-session');
var MongoClient = require('mongodb')。MongoClient;
var routes = require('./ routes / index');
var users = require('./ routes / users');

var Users = require('./ models / user');
var Items = require('./ models / item');
var Store = require('./ models / store');
var StoreItem = require('./ models / storeitem');

var app = express();
// set mongo db connection
var db = mongoose.connection;

MongoClient.connect(mongodb:// localhost:27017 / test,function(err,db){
if(!err){
console.log我们连接);
}
});
// var MONGOHQ_URL =mongodb:// localhost:27017 / test

//查看引擎设置
app.set('views',path.join(__ dirname ,'views'));

app.set('view engine','ejs');

//将您的图标放在/ public
//app.use(favicon(__dirname +'/public/favicon.ico')中)后取消注释);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(cookieParser());
app.use(session({
secret:'something',
resave:true,
saveUninitialized:true
}));

app.use('/',routes);
app.use('/ users',users);
app.use(express.static(path.join(__ dirname,'public')));

// catch 404并转发到错误处理程序
// app.use(function(req,res,next){
// var err = new Error找到');
// err.status = 404;
// next(err);
//});

//使我们的数据库可以访问我们的路由器
app.use(function(req,res,next){
req.db = db;
next );
});

//错误处理程序

//开发错误处理程序
//将打印stacktrace
if(app.get('env')== ='development'){
app.use(function(err,req,res,next){
res.status(err.status || 500);
res.render('错误',{
message:err.message,
error:err
});
});
}

//生产错误处理程序
//没有堆栈跟踪泄漏给用户
app.use(function(err,req,res,next){
res.status(err.status || 500);
res.render('error',{
message:err.message,
error:{}
} );
});


module.exports = app;






似乎这个问题的答案已经改变了版本原因感谢 Nik

解决方案

如果你在2.x上使用express,你必须像下面的代码一样声明app.router。请尝试替换您的代码

  app.use('/',routes); 

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

点击这里获取有关app.router的更多详细信息

谢谢


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.

We had it working before hand but I can't remember what the change was.

throw new TypeError('Router.use() requires middleware function but got a
        ^
TypeError: Router.use() requires middleware function but got a Object


node ./bin/www

js-bson: Failed to load c++ bson extension, using pure JS version
js-bson: Failed to load c++ bson extension, using pure JS version


/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438
      throw new TypeError('Router.use() requires middleware function but got a
            ^
TypeError: Router.use() requires middleware function but got a Object
    at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438:13
    at Array.forEach (native)
    at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:436:13)
    at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:188:21
    at Array.forEach (native)
    at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:185:7)
    at Object.<anonymous> (/Users/datis/Documents/bb-dashboard/app.js:46:5)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)

app.js

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 mongoose = require('mongoose');
var session = require('express-session');
var MongoClient = require('mongodb').MongoClient;
var routes = require('./routes/index');
var users = require('./routes/users');

var Users = require('./models/user');
var Items = require('./models/item');
var Store = require('./models/store');
var StoreItem = require('./models/storeitem');

var app = express();
//set mongo db connection
var db = mongoose.connection; 

MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});
// var MONGOHQ_URL="mongodb://localhost:27017/test" 

// 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: false }));
app.use(cookieParser());
app.use(session({
    secret: 'something',
    resave: true,
    saveUninitialized: true
}));

app.use('/', routes);
app.use('/users', users);
app.use(express.static(path.join(__dirname, 'public')));

// catch 404 and forward to error handler
// app.use(function(req, res, next) {
//     var err = new Error('Not Found');
//     err.status = 404;
//     next(err);
// });

// Make our db accessible to our router
app.use(function(req, res, next){
  req.db = db;
  next();
});

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


It appears the answer to this question has changed for versioning reasons. Thanks to Nik

解决方案

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

Thanks

这篇关于TypeError:Router.use()需要中间件功能,但有一个Object的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆