2016-11-28 67 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); 
};