2

これを確認しましたCoffeeScriptでグローバル変数を定義するにはどうすればよいですか? グローバル変数を宣言するため。つまり、app.jsで宣言し、routes/index.coffeeでアクセスします。

app.coffeeで(exports?this).db = redis.createClient()を宣言し、db.set('online'、Date.now()、(err 、reply)-> console.log(reply.toString()))これは機能していないようです...何が起こっているのか..私はノード0.8.9にいます

それが機能する他のアプローチがありますが、何が起こっているのか知りたいです...また、app.coffeeで@db = redis.createClient()を試しましたが、どちらも機能しません

ありがとう

4

1 に答える 1

6

exports「グローバル;」を定義しません を介して利用可能なモジュールの「パブリック」メンバーを定義しますrequire。また、exportsは常に最初に定義されておりexports === this(exports ? this)実際には何もしていません。

ただし、グローバルは一般的に眉をひそめる(そしてノードのモジュールシステムの意図の一部を無効にする)ため、Webアプリケーションの一般的なアプローチは、またはオブジェクトdbのプロパティとしてへのアクセスを許可するカスタムミドルウェアを定義することです。reqres

# app.coffee
app.use (req, res, next) ->
  req.db = redis.createClient()
  next()
# routes/index.coffee
exports.index = (req, res) ->
  req.db.set('online', Date.now(), (err,reply) -> console.log(reply))

この例は、npmjs.orgdecorate.jsnpm-www背後にあるリポジトリのにあります。

function decorate (req, res, config) {
  //...

  req.model = res.model = new MC

  // ...

  req.cookies = res.cookies = new Cookies(req, res, config.keys)
  req.session = res.session = new RedSess(req, res)

  // ...

  req.couch = CouchLogin(config.registryCouch).decorate(req, res)

  // ...
}

ただし、代わりにグローバルとして定義したい場合はdb、Node.JSで次のglobalようにアタッチできる変数を定義します。

global.db = redis.createClient()
于 2012-09-17T20:24:44.107 に答える