Создание моделей Bookshelf.js без подключения и подключение в файлах маршрутов. - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть 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, вместо передачи их в запросе, он должен быть лучше и безопаснее.

...