exports
没有定义“全局”;它定义了模块的“公共”成员,可通过require
. 此外,exports
最初总是定义和exports === this
,因此(exports ? this)
实际上并没有做任何事情。
然而,由于全局变量通常不受欢迎(并且确实破坏了 Node 模块系统的某些意图),Web 应用程序的一种常见方法是定义一个自定义中间件,允许访问db
作为req
orres
对象的属性:
# 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.org后面的存储库decorate.js
中找到一个示例:npm-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
为全局global
变量,Node.JS 定义了一个您可以附加到的变量:
global.db = redis.createClient()