Cómo usar knexjs globalmente en una aplicación sails js

how do i get the knex object in my controllers or any other model files if i am not using waterline.

for eg.: in my api/models/Users.js

module.exports = {
     find : function(id){
         // my knex query
     insert : function(data){
         // my knex query again   

So in my controllers i will just do:

var result = Users.find(id);


var result = Users.insert({username : 'sailsjs'});

or the knex object will be available globally with out being used in the model files itself... so that i can do the knex query in the controller it self

// UsersController/index

index : function(req, res){
      // my knex query

Thanks Arif

preguntado el 28 de mayo de 14 a las 11:05

You might have to create a custom Waterline adapter -

2 Respuestas


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)

// in the controller

var knex = sails.config.knex

this returns the knex object. the knex.instanceId shows that the same connection is used all over.

Please suggest if this might cause any problems.

Thanks Arif

contestado el 28 de mayo de 14 a las 13:05

I would suggest creating knex.js in the config folder rather than initializing it in the bootstrap file. - miusuf

@myusuf I basically disagree because it would disallow one to use clever sails config vars - Cirilo CHAPON

I'd suggest you to use a service. api/services - Abhirath Mahipal

Best Option to use Knex Js globally in Sails Js (Tested for Version 1+) is to create a file named knex.js inside config directory, like this:

 * 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()

Now, in any file(helpers/controllers/views etc..) you can set and use knex as:

// Now use this knex object for anything like:
let user = await sails.config.knex('user').select('*').first();

respondido 05 mar '20, 12:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.