Node.js 销毁书架/knex连接池
我有一个使用Bookshelf/Knex的db api 我有多个书架模型,看起来像这样: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
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();});
你能分享一下你是如何解决这个问题的吗?