2016-05-08 39 views
1

私は現在、ウェブアプリケーションのルートを再編成中です(私はindex.js内のすべてのルートを愚かに定義しました)これらのファイルのうち、私はこの不可解な問題を抱えています:実際に定義されているときに "グローバル変数"変数が定義されていないというエラーが表示されます。グローバル変数が明確に定義されていると「グローバルが定義されていません」というエラーが表示される

これは、問題のファイルの1つです:ライン37で

http://pastebin.com/7Q5ExZDa

私はglobals.DB_URLの内容をログに記録し、それが存在します。非常に次の行には、グローバルが定義されていないというエラーが出ます。私は間違って何をしていますか?

mongodb://localhost:27017/[redacted_db_name] // console log output 
--- Error: ReferenceError: globals is not defined --- 
Location: function (err){ 
      utilities.logError(err, arguments.callee.toString()); 
      res.redirect("/"); 
      return; 
     } 

UPDATE: まず問題が解決されました:私はutilities.jsでglobals.jsをインポートしていなかった、と関数にグローバルからのデータを必要な関数を呼び出すしようとしていました。

は残念ながら、今、私はこのエラーを取得する:

--- Error: TypeError: Cannot call method 'connect' of undefined --- 
Location: function (err){ 
      utilities.logError(err, arguments.callee.toString()); 
      res.redirect("/"); 
      return; 
     } 

このエラーが第二約束で起こります。私はそれがユーティリティのコード、特にidentUserByToken関数と関係していると思います。

/** 
* identifyUserByToken 
* Compares a given session token against the session tokens collection 
* executes a given callback function if a match is found 
* @param {String} userToken The session token to search for 
* @param {function(Object, String)} The callback function to be called upon success, failure, or error 
*/ 
function identifyUserByToken(userToken, callback){ 
    var user_tokens; 
    var users 
    var promise = new Promise(function(resolve, reject){ 
     mongoClient.connect(globals.DB_URL) 
      .then(function(db){ // Search user_tokens for userToken 
       user_tokens = db.collection("user_tokens"); 
       users = db.collection("users"); 
       return user_tokens.find({token : userToken}).toArray(); 
      }) 
      .then(function(result){ // Search users for the returned userID 
       var userID = result[0].userid; 
       return users.find({ userid : userID }).toArray(); 
      }) 
      .then(function(matchingUsers){ // Pass returned user object to callback 
       var user = matchingUsers[0]; 
       if(callback != undefined) callback(undefined, user); 
       resolve(user); 
      }) 
      .catch(function(err){ 
       if(callback != undefined) callback(err, undefined); 
       reject(err); 
      }); 
    }); 
    return promise; 
} 

EDIT

var globals = require("./globals"); 

    /* == Third Party Libraries == */ 
    var chalk = require("chalk"); /* usage: console output coloring */ 
    var crypto = require("crypto"); /* usage: cryptograpgic primitives (password hashing, etc...) */ 
    var mongodb = require("mongodb"); /* usage: data storage schema */ 

    var mongoClient = mongodb.mongoClient; 

私は、これはMongoDBのが未定義であることを意味知っているが、私はそれをファイルにインポートしています:解決例外TypeError

シンプルタイプミス。 var mongoClient = mongodb.mongoClient;

それが定義するために必要な方法:var mongoClient = mongodb.MongoClient;

申し訳ユーティリティでは、私はそれが定義されていたどのように間違って

mongoClient変数を割り当てました!私の悪い。

+0

mongoClient.connect(url) '? – uglycode

+0

@uglycodeはurlを出力し、次に別のReferenceErrorを取得します。グローバルは定義されていません。 – JimmyStavros

+0

おそらく私はあなたのことを理解していませんでした.37行目でconsole.logに正しい値が表示されていますか?ですから37行目と 'console.log(url);の前に' var url = globals.DB_URL'を実行しても同じ結果が得られますか? – uglycode

答えて

1

問題は、それが資本Mであるべき var mongoClient = mongodb.mongoClient;である:URL値を記録し、 `に渡し、あなたは`のvar URL = globals.DB_URL`やったらどうとなるか

 var mongoClient = mongodb.MongoClient;

関連する問題