2016-11-28 77 views
0

我似乎無法找到如何登錄到我的FeathersJS應用程序中的數據庫。 我寧願在服務中指定數據庫信息和登錄信息,但我只是需要它的工作。 在對myApp /配置/ default.json有下面的行:添加信息登錄到FeathersJS中的數據庫

"postgres": "postgres://postgress:@localhost:5432/feathers_db", 

在:

http://docs.sequelizejs.com/en/latest/docs/getting-started/

它說,像字符串上面應該是:

"postgres": "postgres://username:[email protected]:5432/feathers_db", 

但這不起作用。這也不是非常像羽毛般的,因爲現在我被鎖定在一個postgress數據庫中用於我所有的postgress交易。

在服務/ index.js有以下行:

const sequelize = new Sequelize(app.get('postgres'), { 
    dialect: 'postgres', 
    logging: false 
}); 

我可以自定義上述行是什麼Sequelize說,他們的指南做,有用戶名和密碼作爲參數,但隨後爲什麼模板尚未像這樣佈置? 也有這一行:

app.set('sequelize', sequelize); 

如果我有幾個postgress數據庫,我該怎麼辦?讓我的新Sequelize對象,做一些事情,如:

app.set('sequelize_db1', sequelize_db1); 
app.set('sequelize_db2', sequelize_db2); 

或者我指定數據庫信息,包括服務的模式用戶信息? Postgress的登錄過程看起來像是使用通用數據庫語言而不是後綴?

+0

您應該完全按照您的建議進行操作。僅僅因爲它不在發生器中並不意味着它不是正確的做法。 – Daff

+0

我很擔心打破內置功能與更改生成的文件。他們之所以選擇以這種方式生成這些文件是有原因的,我不知道爲什麼。我會嘗試一下,看看會發生什麼。謝謝! –

+0

生成器正在使用的所有功能也被記錄在案。我們之所以選擇這種方式是因爲它是最容易維護的,不是因爲它是做事的唯一方式。 – Daff

回答

2

所以一句話「是」。我在問題中所問的一切都是肯定的。 我可以連接到數據庫,如後續文檔中所示。我還可以配置config.json文件以使用我的用戶和db名稱進行「postgres」配置。在創建新的sequelize對象時,我還可以將完整路徑放置在services/index.js文件中。要檢查是否有一個連接的最好方法是創建新sequelize對象之後,再有以下代碼:

new_sequelize_object 
    .authenticate() 
    .then(function(err) { 
     console.log('Connection to the DB has been established successfully.'); 
    }) 
    .catch(function (err) { 
     console.log('Unable to connect to the database:', err); 
    }); 

(摘自:http://docs.sequelizejs.com/en/latest/docs/getting-started/

一個還可以定義多個sequelize對象和設置他們在應用程序中。然後,當在特定服務的index.js文件中定義模型時,將新的綁定名稱放在app.get('new_sequelize_object')中。

這裏是服務/ index.js文件有兩個數據庫中定義:

'use strict'; 
const service1 = require('./service1'); 
const authentication = require('./authentication'); 
const user = require('./user'); 
const Sequelize = require('sequelize'); 
module.exports = function() { 
    const app = this; 

    const sequelize = new Sequelize('feathers_db1', 'u1', 'upw', { 
host: 'localhost', 
port: 5432, 
    dialect: 'postgres', 
    logging: false 
    }); 

    const sequelize2 = new Sequelize('postgres://u1:[email protected]:5432/feathers_db2', { 
    dialect: 'postgres', 
    logging: false 
    }); 

    app.set('sequelize', sequelize); 
    app.set('sequelize2', sequelize2); 

sequelize 
    .authenticate() 
    .then(function(err) { 
    console.log('Connection to sequelize has been established successfully.'); 
    }) 
    .catch(function (err) { 
    console.log('Unable to connect to the database:', err); 
    }); 

sequelize2 
    .authenticate() 
    .then(function(err) { 
    console.log('Connection has been established to sequelize2 successfully.'); 
    }) 
    .catch(function (err) { 
    console.log('Unable to connect to the database:', err); 
    }); 


    app.configure(authentication); 
    app.configure(user); 
    app.configure(service1); 
}; 

這裏是使用服務sequelize2服務1/index.js文件: 「使用嚴格的」;

const service = require('feathers-sequelize'); 
const service1 = require('./service1-model'); 
const hooks = require('./hooks'); 

module.exports = function(){ 
    const app = this; 

    const options = { 
    //Here is where one sets the name of the differeng sequelize objects 
    Model: service1(app.get('sequelize2')), 
    paginate: { 
     default: 5, 
     max: 25 
    } 
    }; 

    // Initialize our service with any options it requires 
    app.use('/service1', service(options)); 

    // Get our initialize service to that we can bind hooks 
    const service1Service = app.service('/service1'); 


    // Set up our before hooks 
    service1Service.before(hooks.before); 
    // Set up our after hooks 
    service1Service.after(hooks.after); 
};