如何在sails js应用程序中全局使用knexjs

时间:2014-05-28 10:50:54

标签: node.js global-variables sails.js waterline knex.js

如果我不使用水线,如何在控制器或任何其他模型文件中获取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
}

由于 阿里夫

2 个答案:

答案 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();