#javascript #node.js #postgresql #prisma #fastify
Вопрос:
Я создаю api nodejs, который использует fastify, Prisma и Postgres. У меня есть API, работающий с файлами cookie fastify и сеансом fastify, и я могу получать файлы cookie просто отлично, но мне нужно иметь возможность хранить файлы cookie сеанса в базе данных. Я видел учебник по этому вопросу, но он был без prisma, поэтому я потерял представление о том, как подключить сеанс fastify к пулу баз данных Prisma.
Я использую клиент prisma для подключения к базе данных, чтобы совершать обычные звонки по своим маршрутам, const data = await prisma.model.create({});
server.js
const fastify = require('fastify')({ logger: true });
const PORT = process.env.PORT || 3000;
// Session state
fastify.register(require('./sessions'));
// Register all our routes here.
...
// Startup code for the fastify server.
const start = async () => {
try {
await fastify.listen(PORT, '0.0.0.0');
} catch (error) {
fastify.log.error(error);
process.exit(1);
}
};
// Start the fastify server.
start();
sessions.js
const cookie = require('fastify-cookie');
const session = require('fastify-session');
const fp = require('fastify-plugin');
/**
* @param {import('fastify').FastifyInstance} fastify
*/
const plugin = async (fastify) => {
// All plugin data here is global to fastify.
fastify.register(cookie);
fastify.register(session, {
secret: process.env.SESSION_SECRET,
store: new SessionStore({
tableName: 'UserSession',
pool: ???, <--------------------------------- how to connect?
}),
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: false,
},
});
fastify.addHook('preHandler', (req, reply, next) => {
req.session.user = {};
next();
});
};
module.exports = fp(plugin);
Ответ №1:
Если вы хотите использовать пул соединений Prisma, вам придется создать библиотеку хранения сеансов, аналогичную connect-pg-simple
кодовой базе, или изменить ее, чтобы принять соединение Prisma. Это определенно нетривиальная реализация, и я не думаю, что это имело бы большой смысл без исключительных обстоятельств.
Я бы предложил создать новый pg.Pool
pgPromise
экземпляр или и подключиться к нему, как это было показано в учебном видео, на которое вы ссылались. Нет причин, по которым вы не можете открыть два отдельных пула подключений к одной и той же базе данных (один с Prisma и один с pg.Pool).