W nowej wersji programu Express nastąpiły pewne zmiany w oprogramowaniu pośrednim i dokonałem pewnych zmian w moim kodzie wokół niektórych innych postów na ten temat, ale nie mogę nic zrobić.
Mieliśmy to już wcześniej, ale nie pamiętam, jaka to była zmiana.
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;
Wygląda na to, że odpowiedź na to pytanie uległa zmianie ze względu na wersję. Dzięki Nik
javascript
node.js
express
Datise
źródło
źródło
routes/index
iroutes/users
wracać?Odpowiedzi:
Jeśli używasz express powyżej 2.x, musisz zadeklarować app.router jak w poniższym kodzie. Spróbuj zastąpić kod
z
Proszę kliknąć tutaj , aby uzyskać więcej szczegółów na temat app.router
Dzięki
Uwaga:
app.router jest amortyzowany w wersji Express 3.0+. Jeśli korzystasz z Express 3.0+, zapoznaj się z odpowiedzią Anirudha poniżej.
źródło
Na którejkolwiek ze stron js brakuje
Sprawdź i zweryfikuj wszystkie swoje strony JS
źródło
export {router}
również daje ten błąds
na końcu: |Proste rozwiązanie, jeśli używasz ekspresu i działania
Upewnij się
na końcu Twojej strony
źródło
Otrzymałem ten sam komunikat o błędzie, ale wystąpił inny problem. Publikowanie dla innych, którzy utknęli na tym samym.
I przeniósł ten
get
,post
,put
,delete
funkcje routera do nowego pliku podczas refaktoryzacji, i zapomniał edycji ścieżek. Przykład:Błędny:
Poprawny:
Zajęło mi to trochę czasu, ponieważ błąd sprawił, że sprawdziłem składnię, w której mogłem zawijać argument w obiekcie lub gdzie przegapiłem
module.exports = router;
źródło
sprawdź swój plik route.js
przykład moje route.js
sprawdź koniec Routes.js
module.exports = router
jeśli nie ma, dodaj i module.exports = router uruchom ponownie
goto controller.js (tj. usersController) i sprawdź wszystkie nazwy funkcji, które mogłeś błędnie napisać lub podałeś w pliku tras funkcji, ale pominięto je w kontrolerach
w route.js podałem dwie trasy, ale w kontrolerach nie mogłem zdefiniować trasy dla
router.post („/ users / login”)
to spowoduje błąd **
„TypeError: route.post () wymaga funkcji oprogramowania pośredniego, ale otrzymała obiekt”
**
źródło
Miałem ten błąd i pomoc w rozwiązaniu, którą opublikował Anirudh. Zbudowałem szablon do ekspresowego routingu i zapomniałem o tym niuansie - cieszę się, że to łatwa naprawa.
Chciałem nieco wyjaśnić jego odpowiedź, gdzie umieścić ten kod, wyjaśniając strukturę mojego pliku.
Moja typowa struktura plików jest następująca:
---index.js
(steruje główną nawigacją)(każdy plik [w moim przypadku index.js w obrębie strony drugiej, chociaż strona pierwsza również miałby plik index.js] - dla każdej strony - który używa
app.METHOD
lubrouter.METHOD
musi miećmodule.exports = router;
na końcu)Jeśli ktoś zechce, wrzucę link do szablonu github, który implementuje routing ekspresowy z wykorzystaniem najlepszych praktyk. daj mi znać
Dzięki Anirudh !!! za świetną odpowiedź.
źródło
Sprawdź wszystkie te pliki:
Zapisz poprawnie, w moim przypadku brakowało jednego pliku i wyrzucał ten sam błąd
źródło
W moim przypadku nie eksportowałem modułu.
module.exports = router;
źródło
module.exports = router;