Я пишу приложение node.js с использованием паспорта для аутентификации. Я заметил странное поведение: Если я использую этот код, мой сервер застревает после 10 запросов (я подрезал из некоторых не соответствующего кода):Сервер Node.js застревает после нескольких запросов при использовании паспорта
var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var MySqlBl = require('./server/db/mysqlbl');
var app = express();
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
done(null, user.userName);
});
passport.deserializeUser(function (username, done) {
var mysqlbl = new MySqlBl();
mysqlbl.getUser(username, onGetUserCompleted);
function onGetUserCompleted(user) {
if (user === undefined) {
done('Problem deserializing user');
}
done(null, user);
};
});
passport.use(new LocalStrategy(function (username, password, done) {
var mysqlbl = new MySqlBl();
mysqlbl.getUser(username, onGetUserCompleted);
function onGetUserCompleted(user) {
return done(null, user);
};
}
));
app.use(app.router);
require('./server/routes')(app);
Я пытался полностью удалить любой код паспорта связана между собой, и мой сервер работал очень хорошо, но я все еще хочу использовать паспорт lib ... Любая помощь пожалуйста? Я все испробовал, мне нужно какое-то направление.
Я не знаю о модуле MySqlBl, но, похоже, это может быть утечка подключений к базе данных, если вы никогда не закроете после этого. –
Как сказал @JoachimIsaksson, ваш модуль MySqlBl, вероятно, открывает соединения и не закрывает их, что заполняет пул сокетов ['globalAgent'] (http://nodejs.org/api/http.html#http_class_http_agent). Когда пул заполнен, дальнейшие запросы приостановлены, ожидая освобождения сокета. –
переместите соединение db к модулю, чтобы вы могли повторно использовать объект db – tschiela