Node.js 销毁书架/knex连接池

Node.js 销毁书架/knex连接池,node.js,bookshelf.js,knex.js,Node.js,Bookshelf.js,Knex.js,我有一个使用Bookshelf/Knex的db api 我有多个书架模型,看起来像这样: import bookshelf from '../bookshelf'; var Product = bookshelf.Model.extend({ tableName: 'product' // ... }); export default Product; import Product from '../../Models/Product'; export default functi

我有一个使用Bookshelf/Knex的db api

我有多个书架模型,看起来像这样:

import bookshelf from '../bookshelf';

var Product = bookshelf.Model.extend({
  tableName: 'product'
  // ...
});
export default Product;
import Product from '../../Models/Product';

export default function getProducts(bookshelf) {

  return new Promise((resolve) => {

    Product.collection().fetch().then((products) => {
      resolve({
        products
      });
    });
  });
}
书架包括如下内容:

import dbConfig from './dbConfig';

const knex = require('knex')(dbConfig);
const bookshelf = require('bookshelf')(knex);

module.exports = bookshelf;
我还有多个api操作调用,看起来像这样:

import bookshelf from '../bookshelf';

var Product = bookshelf.Model.extend({
  tableName: 'product'
  // ...
});
export default Product;
import Product from '../../Models/Product';

export default function getProducts(bookshelf) {

  return new Promise((resolve) => {

    Product.collection().fetch().then((products) => {
      resolve({
        products
      });
    });
  });
}
我的问题是knex共享连接,我需要在解析操作文件中的请求之前销毁连接池。但是,为了做到这一点,我需要访问模型中导入的书架或knex对象


我想不出一个好办法来做这件事。我可以在调用操作的顶级文件中创建knex对象,然后该进程在收到响应时会破坏连接。但是,我必须将其传递给动作,然后传递给模型。我如何才能做到这一点,以便在不必到处传递knex对象的情况下销毁连接池?

我曾经遇到过这个问题,并通过将knex对象导出为bookshelf export的属性解决了这个问题(即,在书架的底部添加行
module.exports.knex=knex;
)。这样,您就可以使用
bookshelf.knex.destroy()
访问is别处。当bookshelf没有实现您需要进行的查询时(例如,
bookshelf.knex.raw('some unsupported SQL query')
),它也很方便。

展示了如何在导入bookshelf的API上使用
knex.destroy()

书架上:

module.exports.knex=knex

在API调用书架上:

constknex=require('./bookshelf').knex;
...
Product.collection().fetch()
。然后((产品)=>{
决心({
产品
});})
.finally(()=>{knex.destroy();});

你能分享一下你是如何解决这个问题的吗?