Houve algumas alterações de middleware na nova versão do express e fiz algumas alterações no meu código em algumas das outras postagens sobre esse problema, mas não consigo manter nada.
Tivemos que trabalhar antes da mão, mas não me lembro qual foi a mudança.
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;
Parece que a resposta a esta pergunta foi alterada por razões de versão. Graças a Nik
javascript
node.js
express
Datise
fonte
fonte
routes/index
eroutes/users
retornar?Respostas:
Se você estiver usando o express acima da 2.x, precisará declarar app.router como no código abaixo. Por favor, tente substituir seu código
com
Por favor clique aqui para obter mais detalhes sobre app.router
obrigado
Nota:
O app.router foi depreciado no express 3.0+. Se você estiver usando express 3.0+, consulte a resposta de Anirudh abaixo.
fonte
Em qualquer uma das suas páginas js, você está ausente
Verifique e verifique todas as suas páginas JS
fonte
export {router}
também dá esse erros
no final: |Solução simples se você estiver usando express e doing
tenha certeza de
no final da sua página
fonte
Eu estava recebendo a mesma mensagem de erro, mas tinha um problema diferente. Postagem para outros que estão presos no mesmo.
Eu portado o
get
,post
,put
,delete
funções para novo arquivo router enquanto refatoração, e se esqueceu de editar os caminhos. Exemplo:Incorreta:
Corrigir:
Demorou um pouco para identificar, pois o erro me levou a verificar a sintaxe onde eu poderia estar envolvendo um argumento em um objeto ou onde eu perdi o
module.exports = router;
fonte
verifique seu arquivo routes.js
exemplo minhas rotas.js
verifique o final do routes.js
module.exports = roteador
se não houver, adicione e module.exports = roteador execute novamente
vá para controller.js (ou seja, usersController) e verifique todos os nomes de funções que você pode digitar incorretamente ou que você forneceu no arquivo de rotas de função, mas que perdeu nos contollers
em routes.js, dei duas rotas, mas nos controladores, perdi para definir a rota para
router.post ('/ users / login')
isso fará erro **
"TypeError: route.post () requer a função middleware, mas obteve um objeto"
**
fonte
Eu tive essa ajuda de erro e solução, postada por Anirudh. Criei um modelo para roteamento expresso e esqueci essa nuance - feliz por ter sido uma solução fácil.
Eu queria dar um pequeno esclarecimento à sua resposta sobre onde colocar esse código, explicando minha estrutura de arquivos.
Minha estrutura típica de arquivos é a seguinte:
---index.js
(controla a navegação principal)(cada arquivo [no meu caso, o index.js na página dois, embora a página um também tenha um index.js] - para cada página - que use
app.METHOD
ourouter.METHOD
precise termodule.exports = router;
no final)Se alguém quiser, postarei um link no modelo do github que implementa o roteamento expresso usando as práticas recomendadas. Avise-se me
Graças à Anirudh !!! pela grande resposta.
fonte
Verifique todos os seus arquivos:
Salvar corretamente. No meu caso, um arquivo foi perdido e gerou o mesmo erro
fonte
No meu caso, eu não estava exportando o módulo.
module.exports = router;
fonte
module.exports = router;