Я использую «экспресс-сессию», чтобы включить постоянный вход на моем сайте. Все работает отлично, но когда я использую внешнюю базу данных для хранения файлов cookie, я получаю следующее предупреждение:
(node:6084) UnhandledPromiseRejectionWarning
(node:6084) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:6084) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process wit
h a non-zero exit code.
Я сузил его до связи с полем store
в объекте session
. Ниже вы увидите код моего app.use(session{...})
. Если я удаляю поле store
из этого объекта JSON, по умолчанию используется MemoryStore
, и вышеприведенное предупреждение не выдается. Я использую IBM Cloudant DB, которая отлично взаимодействует и сохраняет данные сеанса, как и ожидалось. Проблема заключается в том, что выше выдается предупреждение.
// Works, but warning is thrown
app.use(session({
store: store, // Use the IBM Cloudant database as a store.
resave: true, // Store sessions back to the store if they were never modified.
saveUninitialized: true, // Save any uninitialized or new sessions that have no data.
secret: SESSION_SECRET,
cookie: {
maxAge: 1000 * 60 * 60 * 2,
secure: true
}
}));
// Works with no warning being thrown.
app.use(session({
resave: true, // Store sessions back to the store if they were never modified.
saveUninitialized: true, // Save any uninitialized or new sessions that have no data.
secret: SESSION_SECRET,
cookie: {
maxAge: 1000 * 60 * 60 * 2,
secure: true
}
}));
Вот моя установка Cloudant, она отлично работает и всегда возвращает Session connected
, потому что она правильно подключается.
// Create the session storage object to store cookies.
const store = new CloudantStore({
url: CLOUDANT_DB_URL,
database: DB_NAME
});
// Inform us that the session is connected to the cloudant database.
store.on('connect', () => console.log('Session connected'));
// Inform us that the session disconnected from the cloudant database.
store.on('disconnect', () => console.log('Session disconnected.'));
// Inform us that the session failed to connect to the cloudant database.
store.on('error', (err) => console.log(err.msg));
Ожидаемый результат - сессия будет работать без выдачи вышеуказанного предупреждения.