Node.js DRY与MySQL客户端

时间:2012-05-26 11:19:28

标签: mysql node.js coffeescript express

所以这是一个简单的问题。基本上我正在制作一个连接到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

2 个答案:

答案 0 :(得分: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并调用导出的函数。无论如何,这将更加清洁。

答案 1 :(得分: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 ...