У меня есть Bookshelf.js
модели (общая модель с функциями parse()
и format()
и модель для каждой таблицы, которая расширяет общую модель) и маршруты, которые используют эти модели. База данных PostgreSQL
. Но у меня есть пользователи в базе данных SQLite
, и у каждого пользователя есть свои параметры подключения к PostgreSQL. Я могу получить текущего пользователя и предоставить его параметры подключения к базе данных в запросе, чтобы каждый маршрут знал, как подключиться к PostgreSQL
. Но как я могу подключиться и использовать мои Bookshelf.js
модели в маршруте? Это пример того, что я пытаюсь сделать в файле маршрутов:
var express = require('express'),
knex = require('knex'),
// This should be the file that exposes all models.
// Every model exposed, extends the general model.
// But it already requires a connection when init Bookshelf.js...
dataBookshelf = require('../models'),
router = express.Router();
router.get('/items/:id',function(req,res,next) {
// In req.db I have PostgreSQL connection options for the current user.
var connection = req.db;
// Make a connection to PostgreSQL.
var db = dataBookshelf(knex(connection));
// Use Items model.
var Items = db.Items;
Items.read(req.params.id).then(function(item) {
res.json(item);
}).catch(Items.NotFoundError,function() {
var err = new Error('Item not found.');
res.status(400).json(err);
});
});
module.exports = router;
Если есть другой способ сохранить текущие параметры подключения пользователя globally
и использовать их в модуле, который предоставляет экземпляр Bookshelf.js
, вместо передачи их в запросе, он должен быть лучше и безопаснее.