0

そこで簡単な質問です。基本的に、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

4

2 に答える 2

2

現在、関数をエクスポートしており、その戻り値はありません。

doどうやら、CoffeeScript のキーワードを使用して自己実行関数を作成できるので、これを試してください。

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

または、µ が短すぎることを示唆し、エクスポートされた関数を呼び出します。そのほうがとにかくすっきりします。

于 2012-05-26T17:18:21.673 に答える
1

私のnode-fuはそれほど強力ではありませんが、これは:

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 ...
于 2012-05-26T17:13:48.690 に答える