Używam sequelize jako ORM i passport.js (paszport-local) do uwierzytelniania. Zauważyłem, że każde żądanie HTTP skutkuje osobnym poleceniem bazy danych. Zacząłem przeglądać funkcję deserializeUser().passport.deserializeUser wykonujący polecenie DB (sequelize) dla każdego żądania HTTP
Wkładając jedną stronę, to jest to, co mam:
Wykonanie: SELECT * FROM
Users
GDZIEUsers
.id
= 1 LIMIT 1;W kółko!
GET/200 12ms - 780
Wykonanie: SELECT * FROM
Users
GDZIEUsers
.id
= 1 LIMIT 1;Wykonanie: SELECT * FROM
Users
GDZIEUsers
.id
= 1 LIMIT 1;W kółko!
GET /js/ui.js 304 4ms
Ciągle w kółko!
GET /stylesheets/main.css 304 6ms
Wykonanie: SELECT * FROM
Users
GDZIEUsers
.id
= 1 LIMIT 1;W kółko!
GET /images/logo.jpg 304 3ms
Oto jak wygląda passport.deserializeUser:
passport.deserializeUser(function(id, done) {
User.find(id).success(function(user) {
console.log('Over and over and over!');
done(null, user);
}).error(function(err) {
done(err, null);
});
});
Strona jestem wzywający:
index: function(req, res) {
res.render('index', {
title: "Welcome to EKIPLE!",
currentUser: req.user
});
}
Czy deserializeUser powinien być uruchamiany dla każdego żądanego obrazu, html, css? Jeśli tak, czy istnieje sposób na zmniejszenie liczby żądań do DB?
Pracowałem! Dzięki! – vilijou
Doskonałe rozwiązanie, mam odmiany tego problemu i opublikowałem pytanie tutaj: http: // stackoverflow.com/questions/34277748/expressjs-passportjs-de-serializes-user-object-for-every-request-to-a-route – Raf