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