2012-05-26 100 views
0

所以这里有一个简单的问题。基本上我正在制作一个连接到MySQL服务器的快速应用程序。很简单。但是,我如何停止添加文件之间的所有连接代码,以便在更改密码或数据库时不必更改多个文件。Node.js DRY与MySQL客户端

例子:

app.coffee

client = mysql.createClient 
    user: config.db.user, 
    password: config.db.pass 

app.get '/', routes.index 

routes/index.coffee

client = mysql.createClient 
    user: config.db.user, 
    password: config.db.pass 

exports.index = (req, res) -> 
    res.render 'index' 

我试图创建一个名为lib/mysql.coffee文件,该文件是这样的:

config = require '../config' 
mysql = require 'mysql' 

module.exports = (-> 
    mysql.createClient 
    host: config.db.host 
    user: config.db.user 
    password: config.db.pass 
    database: config.db.name 
) 

因此,在应用程序,我可以去:

mysql = require './lib/mysql' 
mysql.query 'SHOW TABLES', (err,r,f) -> 
    console.log err 

但它一直给:

TypeError: Object function() { 
    return mysql.createClient({ 
     host: config.db.host, 
     user: config.db.user, 
     password: config.db.pass, 
     database: config.db.name 
    }); 
    } has no method 'query' 

模块:https://github.com/felixge/node-mysql

回答

1

我的节点福是不是强大,但这样的:

module.exports = (-> 
    mysql.createClient 
    ... 
) 

正在导出返回MySQL连接的函数。您的错误消息:

TypeError: Object function() { 
    return mysql.createClient({ 
     ... 
    }); 
    } has no method 'query' 

说尽可能多;那说mysql是没有query方法的函数对象。

你可以继续做你正在做的事情,并说:

mysql = require './lib/mysql' 
db = mysql() 
db.query 'SHOW TABLES', (err,r,f) -> 
    console.log err 

或者你可以导出connect方法:

module.exports = 
    connect: -> 
    mysql.createClient(...) 

和使用:

mysql = require './lib/mysql' 
db = mysql.connect() 
db.query ... 
2

权现在您正在导出该函数并且没有返回值。

显然,你可以创建在CoffeeScript中的do关键字自动执行功能,所以试试这个:

module.exports = do (-> 
    mysql.createClient 
    host: config.db.host 
    user: config.db.user 
    password: config.db.pass 
    database: config.db.name 
) 

或者做什么µ is too short suggests并调用导出函数。无论如何,这将是更清洁。