2012-03-28 90 views
0

在db.js爲什麼出口和要求()創建一個全局變量?

exports = mongoose = require('mongoose') 
在output.js

exports.log = function() { 
    console.log(mongoose) 
} 

在app.js

var mg = require('./db.js') 
var output = require('./output.js') 
output.log() //output mongoose 

如果我改變db.js到:

var mongoose = require('mongoose') 
exports = mongoose 

然後output.log()找不到貓鼬了。

回答

2

這是一個常見的錯誤在javascript中聲明幾個相同的變量在相同的語句期望您聲明一個局部變量相等。

var a = b = 42; 

這將創建一個局部變量a和全局變量b。首先使b等於42,然後a等於b

你想要做什麼是

var a = 42, b = 42; 

var b = 42; 
var a = b; 

在你的第一個db.js代碼,exports已經是本地的模塊,做variable = mongoose = 'whatever';創建一個名爲mongoose全局變量。在第二個db.js代碼中,你聲明mongoose是本地的。

+0

非常感謝你! – Himmel 2012-03-30 04:09:46

0

@DeaDEnD是對的。最簡單的方法來避免這是通過以下這種模式:

var mongoose = module.exports = function() { } 

module已經是全球由於CommonJS的規範,這樣這很好。