如果我不使用水线,如何在控制器或任何其他模型文件中获取knex对象。
例如: 在我的api / models / Users.js
中module.exports = {
find : function(id){
// my knex query
},
insert : function(data){
// my knex query again
}
}
所以在我的控制器中我会做:
var result = Users.find(id);
或
var result = Users.insert({username : 'sailsjs'});
或knex对象将全局可用而不在模型文件本身中使用...这样我就可以在控制器中自己进行knex查询
// UsersController / index
index : function(req, res){
// my knex query
}
由于 阿里夫
答案 0 :(得分:2)
// config / bootstrap.js
module.exports.bootstrap = function (cb) {
var Knex = require('knex');
var knex = Knex.initialize({
client : "mysql",
connection : {
host :'localhost',
user :'root',
database : 'sales_force',
password : '*******'
}
});
knex.instanceId = new Date().getTime();
sails.config.knex = knex;
// It's very important to trigger this callack method when you are finished
// with the bootstrap! (otherwise your server will never lift, since it's waiting on the bootstrap)
cb();
};
//在控制器中
var knex = sails.config.knex
这将返回knex对象。 knex.instanceId显示全部使用相同的连接。
请建议这是否会导致任何问题。
由于 阿里夫
答案 1 :(得分:0)
在Sails Js中进行全局使用Knex Js的最佳选择(经过版本1+测试)是在配置目录中创建一个名为knex.js的文件,如下所示:
/**
* Knex Js, Alternate DB Adapter, In case needed, it is handy for doing migrations
* (sails.config.knex)
*
*
* For all available options, see:
* http://knexjs.org/
*/
const developmentDBConfig = require('./datastores');
const stagingDBConfig = require('./env/staging');
const productionDBConfig = require('./env/production');
function getConnectionString() {
let dbConnectionString = developmentDBConfig.datastores.default.url;
if (process.env.NODE_ENV === 'staging') {
dbConnectionString = stagingDBConfig.datastores.default.url;
}
if (process.env.NODE_ENV === 'production') {
dbConnectionString = productionDBConfig.datastores.default.url;
}
return dbConnectionString;
}
module.exports.knex = require('knex')({
client: 'postgresql',
connection: getConnectionString()
});
现在,在任何文件(帮助器/控制器/视图等)中,您都可以设置knex并将其用作:
// Now use this knex object for anything like:
let user = await sails.config.knex('user').select('*').first();